Ich versuche, rotierende Box mit Newton Physik und OpenGL zu simulieren. Das habe ich implementiert.Wie wird die Transformationsmatrix aktualisiert (NewtonGameDyanmics/OpenGL)?
float mat44[16] = {
1,0,0,0,
0,1,0,0,
0,0,1,0,
0,0,0,1
};
box.mat = &mat44[0];
box.x_size = 0.50;
box.y_size = 0.50;
box.z_size = 0.50;
nWorld = NewtonCreate(NULL, NULL);
NewtonCollision * collision = NULL;
collision = NewtonCreateBox(nWorld, box.x_size, box.y_size, box.z_size,NULL);
body = NewtonCreateBody(nWorld, collision);
NewtonReleaseCollision (nWorld, collision);
NewtonBodySetMassMatrix(body, 10.0, 2.0, 2.0, 2.0);
NewtonBodySetMatrix (body, box.mat);
float omega[3] = {0.0f, 10.0f, 0.0f};
NewtonBodySetOmega (body, &omega[0]);
innerhalb der Rendering-Schleife mache ich diese Dinge.
NewtonUpdate(nWorld, time);
float m[16];
NewtonBodyGetMatrix(body, &m[0]);
box.mat = m;
Mein Problem ist, wie man einen Würfel (eigentlich 8 Punkte) mit der Matrix (box.mat) zeichnet? Wie kann ich aktualisierte Eckpunkte mit der Matrix berechnen?
bitte lassen Sie mich wissen, wie man diesen zweiten Teil (feed OpenGL die unveränderten Vertices und einfach box.mat als die "Modell-Matrix" für OpenGL verwenden)? – shan
Unter der Annahme, dass der aktuelle Matrixstack "GL_MODELVIEW" ist und dass die aktuelle Matrix auf diesem Stapel Ihre Ansichtsmatrix ist, rufen Sie 'glMultTransposeMatrixf (box.mat)' auf. Dies setzt voraus, dass Sie Zeilen-Haupt-Matrizen verwenden, was die gleiche Annahme ist, die ich verwendet habe, um den Code in meiner tatsächlichen Antwort zu schreiben. –
Nein, Sie müssen die Newton-Matrix nicht transponieren, um sie an OpenGL zu übergeben. Rufen Sie einfach glMultMatrixf (m) auf; Wenn m die Matrix ist, erhält man die NewtonBodyGetMatrix-Funktion. –