Wie zu verwenden glMultMatrix( )
Ich bin neu in opengl. Ich versuche zu bewegen, die Kugel, um mit meiner eigenen matrix, aber das Ergebnis ist nicht korrekt.
Die Kugel auf der linken Seite ist das, was ich erwarte, und ich produzieren das Ergebnis auf der rechten Seite mit glMultMatrixd(). Was habe ich falsch gemacht?
void Display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glDisable(GL_LIGHTING);
glDisable(GL_TEXTURE_2D);
glPushMatrix();
GLdouble translate[16] = {1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,1};
glMultMatrixd(translate);
DrawSphere();
glPopMatrix();
glPushMatrix();
glTranslatef(1,0,0);
DrawSphere();
glPopMatrix();
glutSwapBuffers();
}
void Reshape(int width, int height) {
tbReshape(width, height);
glViewport(0, 0, width, height);
glGetIntegerv(GL_VIEWPORT, viewport);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0, (GLdouble)width/height, 0.01, 100);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0.0, 0.0, -5, //eye
0.0, 0.0, 0.0, //center
0.0, 1.0, 0.0); //up
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
GLdouble translate[16] = {1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,1};
ist das gleiche wie
glTranslated(1, 0, 0)
bedeutet lokale Koordinatensystem durch (1, 0, 0)
Ergebnis ist auf der rechten Seite.
nichts ist falsch, Sie einfach nicht verstehen, "matrix-Algorithmus'
deuten lernen der linearen algebra vor der Verwendung von matrix direkt.
------------ Bearbeiten--------------
sorry für mein Fehler.
GLdouble translate[16] = {1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1};
ist die richtige matrix.opengl-matrix ist column-major, also:
GLdouble m[16]
layout als{1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1}