2012-12-28 11 views
8

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(); 
+0

Nur um sicher zu sein, laden Sie eine Identität, bevor Sie Ihre Bounding Box zeichnen? –

+0

Nein, ich habe keine Aufrufe an 'glLoadIdentity()', bis ich die Modelle und Bounding Box gezeichnet habe. – DRiFTy

+2

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. –

Antwort

0

Die Reihenfolge, in der Matrixmultiplikation berechnet wird, ist wichtig. Können Sie stattdessen ModelMatrix * Box verwenden? Ich denke, das ist das Problem.

Verwandte Themen