ebook img

Grafică 3D, animaţie şi jocuri PDF

122 Pages·2005·0.86 MB·Romanian
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Grafică 3D, animaţie şi jocuri

Bogdan PĂTRUŢ Iulian Marius FURDU Grafică 3D, animaţie şi jocuri EduSoft 2005 Redactor: Tiberiu SOCACIU 0Descrierea CIP a Bibliotecii Naţionale a României PĂTRUŢ, BOGDAN Grafica 3D : animaţie şi jocuri / Bogdan Pătruţ, Iulian Marius Furdu. - Bacău : EduSoft, 2005 Bibliogr. ISBN 973-87496-2-X I. Furdu, Iulian Marius 004.42C Copyright © 2005 Editura EduSoft Toate drepturile asupra prezentei ediţii sunt rezervate Editurii EduSoft. Reproducerea parţială sau integrală a conţinutului, prin orice mijloc, fără acordul scris al Editurii EduSoft este interzisă şi se va pedepsi conform legislaţiei în vigoare. Editura EduSoft 600065 Bacău, str. 9 Mai, nr. 82, sc. C, ap. 13 E-mail: [email protected], Web: www.edusoft.ro ISBN 973-87496-2-X 2 Bogdan PĂTRUŢ Iulian Marius FURDU [email protected] [email protected] Grafică 3D, animaţie şi jocuri surse de programe în C++ şi Pascal Editura EduSoft Bacău 2005 3 CUPRINS Introducere 5 Capitolul 1. Puţină geometrie proiectivă. Programul High - 3D 7 1.1. Translaţii. Rotaţii 7 1.2. Programul High – 3D 9 1.2.1. Bazele teoretice 9 1.2.2. Structurile de date folosite 13 1.2.3. Utilizarea programului 15 1.2.4. Listingul comentat al programului 16 Capitolul 2. Animaţie profesională 37 2.1. Fişierele de animaţie FLI 37 2.2. Programul PLFLI pentru animat fişiere FLI 40 Capitolul 3. Afişări deosebite, folosind fişierele de caractere 45 3.1. Formatul fonturilor CHR 45 3.2. Rutine speciale de afişare 47 Capitolul 4. Despre jocurile pe calculator 51 4.1. Ce presupune realizarea unui joc pe calculator 51 4.2. Ce jocuri putem realiza împreună, pe calculator ? 52 Capitolul 5. Jocuri folosind unit-ul CRT 57 5.1. Animaţie la “Turnurile din Hanoi” 57 5.2. Bila 61 5.3. Navele 66 Capitolul 6. Jocuri folosind unit-ul GRAPH 73 6.1. Tetris 73 6.2. Feţe 83 6.3. Transformări de imagini 90 Capitloul 7. Jocuri cu prelucrări de fişiere BMP, în 256 de culori 101 7.1. Amestec 101 7.2. Spânzurătoarea 104 Anexa 1. Fişierele de ajutor ale programului High-3D 108 Anexa 2. Uniturile uMouse, MCGA şi ViewBMP 110 Bibliografie 122 4 Pentru Ştefan, Monica şi Cristina Introducere Grafica este, fără îndoială, unul din cele mai interesante domenii ale utilizării calculatoarelor. Când spunem “grafică pe calculator” ne referim atât la grafica bidimensională (programe de desenare ca PaintBrush sau Corel), cât şi la proiectarea asistată de calculator sau programele de animaţie, chiar şi la jocuri. Este de ajuns să amintim trei din cele mai utilizate produse soft, realizate de un grup al companiei Autodesk: Animator, 3D Studio şi Auto-CAD. Primele două reprezintă programe complexe şi performante de animaţie bi-, respectiv tridimensională, de pe calculatoarele compatibile cu IBM-PC. Cu ajutorul lor se poate realiza animaţie de orice gen, de la simple spoturi publicitare, până la unele desene animate de scurt metraj. Cel de al treilea este un standard în domeniul produselor soft de tip CAD (proiectare asistată de calculator), fiind folosit şi în ţara noastră de foarte mulţi ingineri în proiectarea, realizarea şi dezvoltarea aplicaţiilor inginereşti necesare lor, indiferent de domeniul lor de activitate. Suntem convinşi că toţi cei care deschid copertele acestei cărţi au avut nu o dată ocazia de a “se juca” cu unul din cele trei programe amintite. Însă cititorii sunt conştienţi că în spatele acestor programe stau mii de formule de geometrie analitică, descriptivă şi proiectivă, precum şi algoritmi de compresie a datelor, la care se adaugă un mare efort intelectual şi multă, multă muncă. Adresându-se tuturor programatorilor care doresc să pătrundă puţin în tainele graficii tridimensionale şi ale animaţiei profesionale, fie că ei sunt elevi sau studenţi, informaticieni din producţie sau profesori de informatică, matematicieni sau ingineri, cu toţii având, însă, cunoştinţe de programare în limbajul C, primele trei capitole ale lucrării de faţă le pune la dispoziţie materiale teoretice suficiente pentru a realiza două aplicaţii de gen, destul de complexe. Sunt prezentate şi două programe demonstrative, bine comentate, care pun în practică aceste cunoştinţe teoretice. Primul este un editor - vizualizator de corpuri tridimensionale, iar cel de al doilea un decodificator şi animator de fişiere de animaţie FLI, create de Autodesk Animator. Cartea poate fi considerată un supliment la orice lucrare de grafică în limbajele C şi C++. Fără pretenţia de a se ridica la nivelul lui Auto-CAD, programul HIGH-3D vă permite crearea şi vizualizarea din diferite unghiuri a unor corpuri tridimensionale, de la cele mai simple până la cele mai complexe, a căror realizare depinde de ingeniozitatea, experienţa şi, nu în ultimul rând, de dexteritatea celui ce le creează. În varianta prezentată în paginile cărţii, programul este sub o formă simplificată, aspectul urmărit de noi fiind cel didactic. Programul poate fi extins de către cititor şi chiar îi recomandăm aceasta, pentru a face din el un produs soft de grafică tridimensională cât mai performant. În ceea ce priveşte programul PLFLI, acesta pune în practică algoritmul de decompresie şi vizualizare a unui fişier de animaţie, el poate fi perfecţionat, de asemenea, de cititor, în vederea realizării unor optimizări ale operaţiilor de citire de pe disc, etc. Al treilea capitol al cărţii se ocupă cu domeniul afişărilor în mod grafic, prezentându-se formatul fişierelor CHR, de la care se pleacă în dezvoltarea de funcţii de scriere specială (în mod grafic). Credem că cititorul este conştient de importanţa pe care o au jocurile în educarea omului, încă din anii copilăriei. Calculatoarele, prin posibilităţile lor de a face rapid o serie întreagă de calcule şi de a reprezenta grafic diferite obiecte din natură, pot face aşa încât să simuleze pe ecranele lor aproape orice joc care poate fi practicat, de la jocurile de cărţi sau zaruri, până la şah sau go, de la jocurile cu cuvinte, până chiar la jocurile sportive, deoarece pe calculator pot fi simulate şi animate o serie întreagă de activităţi din lumea reală, din natură. Putem spune, astfel, că jocurile pe calculator reprezintă în mic, pe ecran, lumea mare reală. Suntem fermi convinşi că cititorul acestei cărţi a văzut şi a şi jucat multe jocuri pe calculatoare personale şi chiar a şi încercat să realizeze singur, simple astfel de jocuri. Dacă nu a 5 reuşit să meargă prea departe, îl sfătuim să nu dezarmeze, ci să citească propunerile de jocuri din această lucrare şi, ajutaţi de noi, poate va reuşi să realizeze unele jocuri interesante şi inedite, care vor impresiona pe cei din cercul său de prieteni pasionaţi de informatică. Astfel, lucrarea de faţă se adresează şi acelora care, cunoscând limbajul Turbo Pascal, având destulă experienţă în programare şi cunoscând procedurile grafice pe care acest mediu de programare le oferă, şi-au pus de multe ori întrebarea “Cum se face acest lucru?”, atunci când au văzut un joc sau altul, realizat de firme vestice de renume în acest domeniu. Este o carte pentru tinerii pasionaţi de informatică, de grafică, dar şi de jocuri, iar unit-urile şi programele din paginile de faţă pot fi folosite cu succes şi de alte categorii de programatori. Jocurile din carte sunt de trei feluri: în modul text, în modul grafic EGA sau VGA şi în modul grafic MCGA. Programele de grafică din lucrare folosesc trei unit-uri de bază, care sunt prezentate în anexa de la sfârşitul cărţii: uMouse - pentru lucrul cu mouse-ul în modurile grafice, MCGA - cuprinzând proceduri grafice elementare pentru grafica în 256 de culori, a modului grafic MCGA (200 × 200 pixeli) şi ViewBMP care prelucrează imagini BMP, în diferite moduri grafice. Formatul unui fişier BMP este prezentat în unit-ul BMPTypes, din aceeaşi anexă. Sperăm ca lucrarea să fie de un real folos tuturor pasionaţilor şi specialiştilor în asemenea aplicaţii complexe de grafică, animaţie şi jocuri pe calculator. Autorii 6 Capitolul 1. Puţină geometrie proiectivă. Programul High - 3D 1.1 Translaţii. Rotaţii. În principiu, ne propunem să realizăm un program pe calculator, care să editeze grafic un corp, pe care apoi să-l proiecteze în plan, să-l vizualizeze şi să-l rotească sub diferite unghiuri, faţă de una din cele trei axe de coordonate, prin punctul de coordonate (0,0,0). Să considerăm, aşadar un sistem de coordonate spaţiale, OXYZ şi un punct (x,y,z). Dacă dorim să realizăm translaţii şi rotaţii ale acestui punct, vom folosi o formulare matricială, în care matricea (x1,y1,z1,1) a punctului obţinut în urma aplicării unei transformări, să se obţină din matricea punctului iniţial (x,y,z), înmulţită matricial cu o matrice de dimensiune 4 x 4. A patra componentă (1), apare pentru uşurinţa calculelor. • Astfel, dacă dorim să translatăm punctul de coordonate (x,y,z) într-un nou punct (x1,y1,z1), transformarea ce trebuie aplicată este: 1 0 0 0 (x1,y1,z1) = (x,y,z,1) 0 1 0 0 0 0 1 0 T T T 1 , x y z unde T , T şi T sunt componente ale translaţiei în direcţiile X, Y şi Z, adică deplasările pe cele trei x y z direcţii. • Transformările rotaţiei în spaţiul tridimensional sunt mai complexe, fiind necesară determinarea unei axe de rotaţie. Specificarea axei de rotaţie include atât direcţia cât şi localizarea. Este necesar să se definească rotaţiile în raport cu cele trei axe ale reperului Ox, Oy, Oz. Rotaţia în jurul axei Ox prin punctul (0,0,0) este: 1 0 0 0 (x1,y1,z1,1) = (x,y,z,1) 0 cos a sin a 0 0 -sin a cos a 0 0 0 0 1 Din egalarea celor doi membri şi identificarea necunoscutelor obţinem formulele: x1 = x, y1 = y cos a - z sin a şi z1 = y sin a + z cos a. Unghiul de rotaţie a este măsurat în sens orar în jurul originii, privind originea dintr-un punct de pe axa X pozitivă. Coordonata x nu este, evident, afectată. În mod similar se obţin formulele pentru rotaţii în jurul celorlalte două axe. • Dar, înainte de a-l roti, un corp va trebui să fie reprezentat planar, pe ecran. Coordonatele ecranului, fiind numere întregi originea fiind în colţul stânga-sus (abscisa crescând de la stânga la dreapta, iar 7 ordonata de sus în jos), de acest lucru va trebui să se ţină cont în scrierea formulelor de calcul în cadrul programului. Deocamdată vom considera că lucrăm cu numere reale şi cu sisteme de coordonate obişnuite. Generarea unei imagini în perspectivă revine la a diviza coordonatele X şi Z ale punctului prin profunzimea punctului, care de fapt, este ordonata sa Y. Punctul R(x,y,z) va avea ca perspectivă punctul P(a,b), în planul ecranului. r r r Considerăm un sistem de coordonate OXYZ, situat între corpul respectiv şi ochiul observatorului, un plan de proiecţie (ecranul) şi punctul R (aparţinând corpului), proiectat în P, pe acest plan. Observăm că avem: PP || RR => Δ OPP ~ Δ ORR => OP / OR = OP / OR = O’P / QR 1 1 1 1 1 1 1 1. PP || RR => Δ OPP ~ Δ ORR => OP / OR = OP / OR = O’P2 / QR . 2 2 2 2 2 2 2 Dar, cum şi O’P || QR, rezultă că şi Δ OPO’ ~ Δ ORQ => OP / OR = OO’ / OQ. Avem un şir de rapoarte egale, din care obţinem: b / z = a / x = OO’ / OQ = (y - y) / y , în care: r r max r max ymax = d(O,Q), adică distanţa dintre observator şi punctul Q, corespunzător punctului R, (x,y,z) = coordonatele lui R faţă de sistemul de coordonate tridimensional dat, iar (a,b) sunt r r r coordonatele proiecţiei sale (deci ale lui P), în planul bidimensional, situat între ochiul observatorului şi punctul R. Formulele prezentate anterior se regăsesc, cu adaptările de rigoare, în cadrul funcţiilor RotireOX, respectiv ProiecteazăCorpul din programul de care se ocupă capitolul următor. 8 1.2. Programul High - 3D În urma unei munci susţinute, de cercetare, proiectare şi programare, în perioada septembrie 1993 - ianuarie 1994, am realizat un program de grafică interactivă tridimensională, care permite utilizatorului să creeze, iar apoi să vizualizeze, pe ecranul calculatorului, corpuri tridimensionale. De asemenea, programul, numit High-3D, permite translarea, rotirea şi redimensionarea corpului, precum şi imprimarea pe hârtie a imaginii sale grafice în două dimensiuni. Sistemul lucrează interactiv, având o interfaţă foarte prietenoasă, cu comenzi de tastatură sau de mouse şi cu un sistem de “help” (ajutor). În cele ce urmează vom prezenta bazele teoretice ale produsului amintit, iar la sfârşit vom pune la dispoziţia cititorului o variantă mult redusă a programului, însă mult mai elegant realizată şi prezentată. Această variantă a fost realizată de curând şi este scrisă în limbajul C (Borland C++ 3.1). 1.2.1. Bazele teoretice Ideea care stă la baza editării de corpuri tridimensionale, folosind un spaţiu de lucru bidimensional (suprafaţa ecranului) este următoarea: Un corp tridimensional poate fi reprezentat prin secţiuni în planul xOy, de-a lungul axei Oz, secţiuni paralele şi legate (în general) între ele: Astfel, pentru a construi un corp vom desena diferite secţiuni xOy, plimbându-ne de-a lungul lui Oz şi unind punctele corespunzătoare între ele: 1 cu 1', 2 cu 2' etc.. Probleme apar atunci când se doreşte crearea unor corpuri, ca de exemplu: 9 Programul High-3D permite rezolvarea acestui gen de probleme, folosind funcţii speciale, astfel: (a) În cazul piramidei nu se va desena în secţiunea 1 un triunghi, iar în a doua un punct, deoarece trasarea muchiilor de legătură între secţiuni se face automat, High-3D unind 1' cu 1, cu 2, până la minimul dintre numărul de puncte dintr-o secţiune şi numărul corespunzător celeilalte. Pentru obţinerea unei piramide se va proceda astfel: - fie se va copia triunghiul (1'2'3') în secţiunea a doua, apoi se va micşora suficient de mult pentru a crea impresia unui punct: 10

Description:
Bogdan PĂTRUŢ. Iulian Marius FURDU [email protected] [email protected]. Grafică 3D, animaţie şi jocuri surse de programe în C++ şi
See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.