Curs de grafică pe calculator - sarcina 4

Scopul lucrării - obtinerea de abilități de a lucra cu obiecte geometrice în spații cu două și trei-dimensionale, conceptul de morphing obiecte geometrice, cele mai simple abilități de vizualizare folosind OpenGL.

Trebuie să creați un program care să vă permită să modelați obiecte bidimensionale și tridimensionale de o anumită formă.

Curs de grafică pe calculator - sarcina 4

Curs de grafică pe calculator - sarcina 4

Fig.1 Exemple de morfing în spații două și tridimensionale.

Puteți descărca un exemplu de implementare a unei sarcini în spațiul tridimensional.

Algoritmul propus

Oferim o posibilă realizare a figurilor convexe plane. Algoritmul este evident generalizat pentru cazul cifrelor tridimensionale.

O descriere detaliată a algoritmului poate fi găsită în articolul atașat.

Luați în considerare procesul de morfizare a figura convexă A într-o figura convexă B.

Fie ca morfizarea să aibă loc în intervalul de timp [0,1]. Este necesar să specificăm cifra AB (t) pentru fiecare timp t de la [0,1] astfel încât AB (0) = A. AB (1) = B. Și schimbarea AB cu timpul este netedă.

Etapa I. Crearea figurilor descrise.

Prin fețele figurinei A, sunt trase linii - le numim linii delimitare. Figura delimitată de aceste linii drepte este A ".

O traducere paralelă a liniilor de intersecție este realizată astfel încât A "este cifra minimă care conține figura B (figura 2). Transferul paralel al fețelor separat este prezentat în figurile 2a, 2b, 2c. În Fig. 2d arată rezultatul: figura inițială "a descris" cea finală. Dacă executăm transferul pentru o perioadă finită de timp, obținem morfizarea lui A în A ":

În mod analog, este creată imaginea B "a figurii B care conține figura A și morfingul B '= B' (t). Construcția imaginii este prezentată în Fig. 3a-d.

Fig.2 Crearea figurilor care descriu.

Fig.3 Crearea figurilor descrise.

Etapa a II-a. Morphing.

Pentru a construi un cifrele morphing continuu A și B reciproc produse simultan morphing A în A „și B“ la B. Pentru fiecare t [0,1] AB „(t) este construit figura. care este intersecția A '(t) și B' (t). Procesul de obținere a cifrelor intermediare este prezentat în Fig. 4a. Rezultatul este afișat în fișierul Pic. 4b.

Fig.4a Procesul de morfing.

Curs de grafică pe calculator - sarcina 4

Fig.4b Procesul de morfing.

AB '(0) = A
AB '(1) = B
AB se schimbă ușor în timp

O descriere detaliată a algoritmului pentru cazul tridimensional

Notă: persoanele care doresc să practice mintea cu algebră liniară sunt sfătuite să ignore această secțiune. În rest, vom descrie în detaliu modul de rezolvare a problemei.

Pasul 1. Construirea figurilor care descriu.

Să presupunem că normalele feței figura A sunt orientate spre exterior, va fi numită o jumătate de spațiu față în față (sau un plan care conține legat) figuri și pozitive (P + (a)), în cazul în care normală a feței este îndreptată spre o jumătate de spațiu.

Setați rezoluția morfingului (numărul de cifre intermediare între A și B) - N.

Luăm fața lui A. Noi denotăm planul care îl conține, a. Calculăm vectorul minim d. astfel încât figurile A și B să se situeze în întregime pe o parte a feței a '. obținut de la o prin deplasarea cu d.

Între toate vârfurile figurii B, găsim vârful M, care este cel mai îndepărtat de planul a și este în P + (a). Proiecția unui vector dintr-un punct arbitrar a la M pe a normal este vectorul necesar d.

Noi denotăm avionul obținut de la a adăugând la el d * (i / N). ca un (i).

Repetăm ​​pasul 1 pentru toate fețele figurilor A. Setul de fețe obținute pentru fiecare i este notat cu A (i).

Pentru figura B, repetăm ​​aceeași procedură, cu excepția faptului că notația b (i) pentru fețele din figura B înseamnă b + d * (N-i / N).

Pasul 2. Generați morfing.

Pentru a obține etapa i a morfingului, este necesar să găsim o cifră delimitată de seturile de planuri A (i) și B (i). Unirea acestor seturi se numește C (i).

Observăm setul Q 'al punctelor în care se intersectează trei sau mai multe fețe de la C (i).

Obținem din Q 'setul Q prin aruncarea punctelor în jumătatea spațiului pozitiv al cel puțin uneia dintre planurile din C (i).

Formați fețele figura intermediare din punctele Q.

Pentru fiecare plan în C (i) găsim puncte din Q. Punctele care îi aparțin (distanța de la avion la punct este zero). Aceste puncte devin vârfuri ale feței.

Numărăm punctele astfel încât să formeze un poligon convex. Alegem vectorul b. conectând două puncte selectate în mod arbitrar A și B din setul în cauză. Indicăm prin n normală la planul la care apar punctele setului (planul poate fi găsit din orice trei puncte ale setului). Numerotarea punctelor setului se face în conformitate cu unghiul la care este necesar să se rotească b în jurul lui A. astfel încât planul care trece prin n și q. a inclus un altul decât A și B punctul C din set, adică între vectorii b și c = AC. Notă: când numerotați, rețineți că va trebui apoi să găsiți normala chipului rezultat.

Notă: sarcina rezolvată la pasul 3 este găsirea unei căi convexe pentru setul de puncte din Q. Există mai mulți algoritmi eleganți pentru a rezolva această problemă. Implementarea unor astfel de algoritmi este o ocazie pentru a primi un bonus.

Partea necesară

Partea obligatorie presupune realizarea morfingului de poligoane convexe în spațiul bidimensional. În program există poligoane inițiale și finale definite rigid. La comanda utilizatorului, procesul de morfing este pornit.

Procesul de morfing ar trebui să fie clar vizibil pe ecran - viteza procesului trebuie să fie rezonabilă.

Cifrele inițiale și finale trebuie să difere semnificativ: numărul diferit de vârfuri, muchii etc.

În loc de figuri plane (sau în plus față de ele), puteți implementa morphing în spațiul tridimensional - această opțiune este dat mai multe puncte. Procesul este vizualizat folosind biblioteca OpenGL.

Partea suplimentară

Mai jos sunt posibilitățile pentru care puteți obține puncte suplimentare.

Controlul progresului morfingului: butoanele înainte, înapoi, pauză, faceți un pas de morfing.

Citirea modelelor poligonale sau poligonale dintr-un fișier.

Formatul fișierului pentru cazul bidimensional:

Fiecare linie conține coordonate de vârf separate de spațiu. Numărul vertexului este același cu numărul liniei. Vârful este numerotat în sensul acelor de ceasornic. Coordonatele vârfului sunt numere reale, se află în intervalul [-1,1].

Formatul fișierului pentru cazul tridimensional:

MESH_FILE. =
MESH_VERTEX_LIST <>
MESH_FACE_LIST <>
>

Notă: în descriere simbolul <и лексемы MESH_VERTEX_LIST, MESH_FACE_LIST нужно рассматривать как строковые константы. - целое неотрицательное число, - вещественное число в диапазоне [-1,1].

Amestecarea culorilor sau a texturilor. Blending color - o schimbare treptată a culorii în procesul de morfing o figura în alta. Amestecarea texturii: texturile sunt suprapuse pe modelele originale și țintă polyhedron. Intermediar modele de textură morphing este un amestec de modele inițiale și finale de textură obținute prin OpenGL multitexturing (cm. Materialele pentru lucrare).

Exemple de modele de poligoane și polyhedra:

înregistrare

Designul nu diferă de obicei.

ZIP-fișier cu codul sursă și fișierele executabile, numit conform schemei GZV_nnnnnnnn.zip (unde G - ultima cifră a numerelor de grup, Z - numărul de locuri de muncă, V - stabilirea numărului versiunii, nnnnnnnn - student la numărul de identificare) pentru a trimite [email protected]. msu.su

De exemplu, un student de 206 grupe cu număr de student ID-ul 06529042, care oferă versiune actualizată (a doua), a doua sarcină a programului ar trebui să trimită un fișier cu numele 622_06529042.zip.

Nu uitați să puneți fișierul readme.txt în arhivă. În fișier, descrieți interfața programului (algoritmul de lucru cu programul, elementele de meniu, cheile de control)

Rezultatele muncii

Rezultatele sunt pe internet și / sau pe standul din apropierea camerei 703.

notițe

  1. Sarcina este strict individuală. Pentru lucrul în comun sau schimbul de bucăți de cod, se atribuie -5 puncte tuturor participanților, în cazul în care lucrul în echipă nu a fost specificat în textul readme.txt al sarcinilor.
  2. Se recomandă să scrieți un program pentru familia Windows. Scrierea pentru alte sisteme de operare este nedorită și poate cauza întârzieri în verificarea acestor lucrări.