Vinnige 3D Inleiding

Hier is hoe ek dit verstaan so as daar foute is laat weet dan fix ek dit. Ek begin sommer by die heel basic stuff so eerste goed mag dalk boring wees.

Vertices
A punt in die 3D wêreld word a vertex genoem (meervoud is vertices) en bestaan uit 3 komponente x, y en z wat die posisie van die punt in 3D spasie definieer.

Primitives
Primitives is basies die boublokkies van jou model en is gewoonlik driehoeke, vierkante of strips van driehoeke, ens. wat gedefinieer word met vertices. Is belangrik om op te let hoe die primitives geskep word. Daar is n verskil tussen primitives wat gevorm word met vertices in clockwise stappe en vertices in anti-clockwise stappe. Gewoonlik skep mens dit in anti-clockwise (default) stappe wat dan die voorkant van n primitive beskryf. Dit word veral belangrik wanneer mens net die voorkant van n object will display of hoe lig met die primitive reageer. Dit is well moontlik om vir openGL te se om clockwise as voorkant te neem as mens dit sou wou omruil. Hierdie is dalk nie aan die begin so belangrik nie maar kan n paar kopsere later spaar.

Matrikse
Om die vertices in 3D spasies te manipuleer gebruik mens matrix wiskunde. Daar bestaan n paar standaard matrikse wat n mens kan gebruik en is so maklik soos om jou vertices met een of meer van hulle te maal. Daar word gesê jy pas n ‘transform’ toe wanneer jy met hulle maal. Vir hersiening, so maal mens n vertice met n matriks:

matrixmultiplication

Is nie moeilik nie en opengl doen dit meestal anyway vir n mens, so die is meer vir agtergrond en incase mens dit vir ander redes in die toekoms mag nodig kry.

Hier is n paar belangrike matrikse:
Translation Transform
Translation beteken om te beweeg. So as jy n vertex in enige rigting wil beweeg dan maal jy met die translation matrix.

Rotation Transform
Rotation is heel obvious en as jy n vertex will rotate dan maal jy met hom.

Scaling Transform:
Ook vanselfsprekend as jou vertex will scale dan maal jy met hom.

Daar is nog n paar ander transforms ook maar ek dink mens kry die idee. n Ander belangrike konsep is dat mens die transforms kan kombineer. As jy byvoorbeeld wil draai en beweeg kan jy jou vertices maal met translation en dan rotation.

Koordinaar stelsels of ‘Spaces’
Model space is die koordinaat stelsel waarin jou 3D models gebou is. As jy n model bou soos byvoorbeeld n cube dan het jy tipies 8 vertices:
X          Y         Z
-0.5      0.5    0.5
-0.5    -0.5    0.5
0.5    -0.5    0.5
0.5      0.5     0.5
-0.5      0.5    -0.5
-0.5    -0.5    -0.5
0.5    -0.5    -0.5
0.5      0.5    -0.5
Hierdie 1 x 1 x 1 cube is gebou om die 0,0,0 punt en is n algemene manier hoe models gebou word.

World space is die koordinaat stelsel van jou 3D wêreld en is ook gebou om 0,0,0. Alle objects wat jy in jou wêreld wil he moet eers daarheen getransform word. Die komponente in jou world space as jy na die skerm kyk is:
positief X na regs
positief Y na bo
positief Z uit jou skerm na jou oë
Jou ‘camera’ in die world space sit in die middel op punt 0,0,0 en kyk op die Z-as lanks in n negatiewe rigting. Ook belangrik om te onthou dat jou kamera nie kan beweeg nie en altyd in daai rigting kyk. So as jy die illusion van n kamera wil skep wat beweeg dan moet jy jou wereld beweeg eg. “The engines don’t move the ship at all. The ship stays where it is and the engines move the universe around it.” 🙂

Vertex Transformation
Die diagram hieronder wys die Geometric Path (Vertex Operation en Primitive Assembly) van die OpenGL rendering pipeline.

vertextransformation

Hier kan mens sien dat opengl reeds n paar van daai standaard matrikse in plek het wat jou geometery van n klomp punte vat na die image wat op jou screen eindig. Opengl noem hulle MatrixModes.
Wanneer jou geometery (wat bestaan uit vertices) uit jou graphics card se memory kom (die Vertex Data block in die diagram) dan is hulle in model space (hulle eie local coordinate system). Die eerste matrix in die lyn is dan die ModelView matrix wat gebruik word om die objects in jou world space te plaas. So as jy jou model wil beweeg of plaas moet jy seker maak jy is in ModelView mode (glMatrixMode(GL_MODELVIEW)) voor jy die transforms (glRotatef(), glTranslatef(), etc.) maak.
Die volgende matrix mode is Projection matrix en jy gebruik hom om jou projection (perspective of orthographic) te stel. Die Divide by w verstaan ek nog nie lekker nie 🙂 en dan is daar die ViewPort transform waar mens jou view frustum opstel. Dit is basically die area in jou wêreld wat jy will sien. Goed soos die view angle, near plane en far plane.

perspectiveviewingfrustum

orthographicviewfrustum

Die volgende interessante ding is hoe mens die illusion van jou kamera doen, maar sal dit dalk in n ander post doen…

Advertisements

1 Comment

  1. Dankie man, dit het dinge duideliker gemaak. Ek is wel nog nie lekker by met die laaste stuk oor die frustrums nie, sal dit weer moet lees. ‘n Paar goed waarmee ek gesukkel het is nou duideliker

    Like

Lewer kommentaar

Verskaf jou besonderhede hieronder of klik op 'n logo om in te teken:

WordPress.com Logo

Jy lewer kommentaar met jou rekening by WordPress.com. Log Out /  Verander )

Google+ photo

Jy lewer kommentaar met jou rekening by Google+. Log Out /  Verander )

Twitter picture

Jy lewer kommentaar met jou rekening by Twitter. Log Out /  Verander )

Facebook photo

Jy lewer kommentaar met jou rekening by Facebook. Log Out /  Verander )

Connecting to %s