Ich habe eine Modellmatrix, die ich für Position des Netzes in meiner Welt beobachte. Bei jedem Anruf an glRotate()
und glTranslate()
habe ich einen entsprechenden Anruf an modelMatrix.rotate()
und modelMatrix.translate()
, die scheinbar richtig funktioniert.Wenden Sie Matrixtransformationen auf BoundingBox an
Jetzt muss ich die Bounding Box mit jedem meiner Modelle aktualisieren. Ich arbeite im libGDX-Framework und in der BoundingBox
Klasse found here gibt es eine Methode mul()
, die mir erlauben sollte, eine Matrix auf die Bounding Box anzuwenden, aber die Werte werden nicht korrekt aktualisiert und ich denke, dass es so sein kann wie ich bin versuchen, es anzuwenden. Irgendwelche Ideen?
Hier ist mein entsprechender Code:
gl.glPushMatrix();
// Set the model matrix to the identity matrix
modelMatrix.idt();
// Update the orbit value of this model
orbit = (orbit + ORBIT_SPEED * delta) % 360;
gl.glRotatef(orbit, 1.0f, 1.0f, 0);
// Update the model matrix rotation
modelMatrix.rotate(1.0f, 1.0f, 0, orbit);
// Move the model to it's specified radius
gl.glTranslatef(0, 0, -ORBIT_DISTANCE);
// Update the model matrix translation
modelMatrix.translate(0, 0, -ORBIT_DISTANCE);
// Update the bounding box
boundingBox.mul(modelMatrix);
if (GameState.DEBUG)
{
renderBoundingBox(gl, delta);
}
// Bind the texture and draw
texture.bind();
mesh.render(GL10.GL_TRIANGLES);
gl.glPopMatrix();
Nur um sicher zu sein, laden Sie eine Identität, bevor Sie Ihre Bounding Box zeichnen? –
Nein, ich habe keine Aufrufe an 'glLoadIdentity()', bis ich die Modelle und Bounding Box gezeichnet habe. – DRiFTy
Ich denke du solltest. Weil du deinen bb 2 mal transformierst. Mach einen Push/Pop innerhalb des Renderbbs. Behalte die Projektion. Wenn Sie die Transformationen testen wollen, laden Sie die Identität nicht und rufen Sie nicht mul(). Auf diese Weise würden Sie te bb mit denselben Transformationen wie das te Model zeichnen. Sollte arbeiten. –