Modelview matrix

De modelview matrix is de matrix die het co÷rdinaat systeem verzorgt waardoor je voorwerpen kunt bewerken.De matrix is een 4X4 matrix die vermenigvuldigt wordt met vertices en co÷rdinaten wat het resultaat van de bewerkingen weergeeft. Bovendien is dit de bovenste matrix in een rij van drie matrices die zich in de zogenaamde OpenGL matrix stack bevinden.

Om de modelview matrix te gebruiken moet je dit eerst aangeven door glMatrixMode() op te roepen. Als parameter heb je de mogelijkheid uit GL_MODELVIEW, GL_PROJECTION, en GL_TEXTURE, wij gaan dus nu uit van de modelview. Om te zorgen dat er geen rare dingen gebeuren als je een voorwerp rendert moet je eerst de matrix resetten door glLoadIdentity() op te roepen. Hierdoor wordt de modelview matrix gelijk aan de identity matrix.

Tot nu toe veel teorie maar op zich is het niet eens zo moeilijk, kijk maar eens naar je eigen programma's ik weet zeker dat je dit al vaak genoeg hebt gebruikt.


glMatrixMode(GL_MODELVIEW);  // Ik wil de modelview matrix bewerken
glLoadIdentity();  	     // reset de modelview matrix

glBegin(GL_TRIANGLES);
	// je voorwerp
glEnd(); 
Toch redelijk standaard dacht ik en in elk programma wel weer te vinden.

Translation

Het woord zegt het al, hiermee kun je voorwerpen verplaatsen in je wereld door gebruik te maken van glTranslatef(GLfloat x, GLfloat y, GLfloat z) functie. Wil je meer precisie in je games dan kun je ook van glTranslated(GLdouble x, GLdouble y, GLdouble z) functie gebruik maken.

Rotatie


Een voorwerp roteren doe je met de glRotatef(GLfloat hoek, GLfloat x, GLfloat y, GLfloat z) functie, of de double variant glRotated(...). De parameter hoek geeft hier de hoek aan in graden en de andere drie parameters geven aan over welke as het voorwerp gedraait wordt.

Scaling

De laatste functie die ik hier bespreek is de glScalef(GLfloat x, GLfloat y, GLfloat z) functie, en natuurlijk heeft deze ook weer een variant met doubles. Wat je hiermee doet zal ook wel duidelijk zijn, je kunt een voorwerp hiermee vergroten en verkleinen over en bepaalde as.

Push en Pop ?

De glPushMatrix() en glPopMatrix functies zijn het laatste wat ik hier wil bespreken en zijn alles wat je nodig hebt om volledige controle te krijgen over de modelview matrix. Telkens als je pushmatrix oproept wordt er een nieuwe "modleview"matrix op de bestaande geplaatst waardoor de oude co÷rdinaten bewaart blijven. Nu kun je dus een voorwerp maken en deze bewerken in zijn eigen co÷rdinaat systeem. Met popmatrix haal je de matrix vervolgens weer weg en ben je dus weer bij je originele co÷rdinaat systeem. Het idee hierachter is dat je elk voorwerp in zijn eigen co÷rdinaat systeem kunt bewerken. Je hebt bijvoorbeeld 10 dozen gemaakt en deze tussen push en pop matrix gezet. Je kunt nu dus elke doos verplaatsen roteren en scalen zonder het wereld co÷rdinaatsysteem aan te passen.

Ik hoop dat het een klein beetje duidelijk is geworden maar om het goed door te krijgen raad ik je aan om hier zelf een beetje mee te experimenteren dan heb je het snel genoeg door. Het is uitermate handig en zul je vaak genoeg tegenkomen in andere tutorials van mij, nu weet je in ieder geval het idee hier achter.

Succes

Vampire,