Zolo Skrevet 21. juli 2007 Del Skrevet 21. juli 2007 Hvordan kan eg laste inn mine egne matriser for objetene som eg vil rendre i opengl. For camera var det glMultMatrix(mymatrix). Men dersom eg vil bruke min egen matrise til objektene hvordan skal den sendes inn til openGL? Lenke til kommentar
GeirGrusom Skrevet 21. juli 2007 Del Skrevet 21. juli 2007 med glLoadMatrix eller glMultMatrix (avhengig om du vil multiplisere, eller endre matrisen) Det er jo som kjent ingen "kamera" matrise i OpenGL (objekter må flyttes unna null punkt med modelview matrisen, kun perspektiv og slikt settes opp med projection matris, vanligvis) glLoadMatrix og glMultMatrix vil alltid operere på den aktive matrisen, som endres med glMatrixMode, og kan være GL_MODELVIEW, GL_PROJECTION eller GL_TEXTURE For å hente tilbake matrisen, bruker du glGet meg GL_MODELVIEW_MATRIX, GL_PROJECTION_MATRIX eller GL_TEXTURE_MATRIX. Matrisen er column major, altså, de går fra top-ned, høyre-mot venstre (altså vanlig) Lenke til kommentar
Zolo Skrevet 21. juli 2007 Forfatter Del Skrevet 21. juli 2007 med glLoadMatrix eller glMultMatrix (avhengig om du vil multiplisere, eller endre matrisen)Det er jo som kjent ingen "kamera" matrise i OpenGL (objekter må flyttes unna null punkt med modelview matrisen, kun perspektiv og slikt settes opp med projection matris, vanligvis) glLoadMatrix og glMultMatrix vil alltid operere på den aktive matrisen, som endres med glMatrixMode, og kan være GL_MODELVIEW, GL_PROJECTION eller GL_TEXTURE For å hente tilbake matrisen, bruker du glGet meg GL_MODELVIEW_MATRIX, GL_PROJECTION_MATRIX eller GL_TEXTURE_MATRIX. Matrisen er column major, altså, de går fra top-ned, høyre-mot venstre (altså vanlig) 9116677[/snapback] Har fått til kamera... Men dersom eg skal lage en roterende kube (bare for å ta noe) blir det da glMatrixMode( GL_MODELVIEW ); glMultMatrix( rotasjonsmatrise_til_kuba ); Og i såfall hva skjer om eg vil ha flere kuber med forskjellige matriser? Lenke til kommentar
GeirGrusom Skrevet 21. juli 2007 Del Skrevet 21. juli 2007 (endret) Da burde du bruke glPushMatrix og glPopMatrix. glPushMatrix vil lagre den aktive matrisen i stack, og glPopMatrix vil da hente den tilbake. Matrisen vil fungere i modelview som om du flytter eller roterer verdens referansepunkt, beste måten å lære seg det på, er rett og slett bare å prøve seg fram. Det vil virke logisk hvis du leker deg litt med det. Men vær obs på at hvis du flytter "kameraet" med GL_PROJECTION_MATRIX vil blant annet tåkeberegninger bli feil, eller ikke slik man som oftest ville ønsket dem. Så et eksempel på hvordan man tegner flere objekter, og roterer dem litt glMatrixMode(GL_PROJECTION); glLoadMatrix(camera.ProjectionMatrix); glMatrixMode(GL_MODELVIEW); glLoadMatrix(camera.ModelMatrix); glPushMatrix(); // Lagre den aktive matrisen på stack glMulMatrix(cube0.Matrix); cube0.Render(); glPopMatrix(); // Hent tilbake den aktive matrisen glPushMatrix(); glMulMatrix(cube1.Matrix); cube1.Render(); glPushMatrix(); glMulMatrix(cube2.Matrix); cube2.Render(); glPopMatrix(); glPopMatrix(); Når vi først er inne på det, så foretrekker jeg å bruke matriser, framfor å lagre Position, rotation og scale etc, men vet noen om det er noen måte å hente tilbake roteringsverdiene tilbake fra en matrise? scale og position er jo grei nok. Endret 21. juli 2007 av GeirGrusom Lenke til kommentar
Zolo Skrevet 23. juli 2007 Forfatter Del Skrevet 23. juli 2007 Det viser seg at kamerat ikke er riktig. draw metoden glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); camera->SetPrespective() Camera::SetPrespective() Quaternion q; Matrix matrix; pitch.CreateFromAxisAngle(1.0, 0.0, 0.0, pitchDegree); heading.CreateFromAxisAngle(0.0, 1.0, 0.0, headingDegrees); // combine pitch and heading q = pitch * heading; matrix = q.GetMatrix(); matrix.Translate(position.x, position.y, position.z); //use the matrix in openGL glMultMatrixf(matrix.mtx); Lager en totasjonsmatrise og legger til translasjone. Men når det kjører så blir modellen roert i stedet for verden. Det skal være et first-person kamera. Men når det skal bevege seg i x, z retning så blir ikke aksene rotert slik at z retning alltid blir "rett fram". Lenke til kommentar
GeirGrusom Skrevet 23. juli 2007 Del Skrevet 23. juli 2007 Prøv å bytte om rekkefølgen på rotation og translation Lenke til kommentar
Zolo Skrevet 23. juli 2007 Forfatter Del Skrevet 23. juli 2007 Prøv å bytte om rekkefølgen på rotation og translation 9126469[/snapback] Nope var ikke det, måtte multiplisere retningen med rotasjonsmatrisen. Lenke til kommentar
GeirGrusom Skrevet 23. juli 2007 Del Skrevet 23. juli 2007 Prøv å bytte om rekkefølgen på rotation og translation 9126469[/snapback] Nope var ikke det, måtte multiplisere retningen med rotasjonsmatrisen. 9128752[/snapback] Jeg gikk utifra at Translate funksjonen din gjorde det Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå