2012-12-28 6 views
8

Ho una matrice modello di cui sto tenendo traccia per la posizione della mesh nel mio mondo. Con ogni chiamata a glRotate() e glTranslate() ho una chiamata corrispondente a modelMatrix.rotate() e modelMatrix.translate() che sembra funzionare correttamente.Applicare trasformazioni di matrice a BoundingBox

Ora ho bisogno di aggiornare il riquadro di delimitazione associato a ciascuno dei miei modelli. Sto lavorando nel framework libGDX e nella classe found here, c'è un metodo mul() che dovrebbe consentirmi di applicare una matrice al riquadro di delimitazione ma i valori non vengono aggiornati correttamente e penso che possa essere il modo in cui sono cercando di applicarlo. Qualche idea?

Ecco il mio codice rilevante:

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

Per sicurezza, stai caricando un'identità prima di disegnare il riquadro di selezione? –

+0

No, non ho alcuna chiamata a 'glLoadIdentity()' fino a quando non disegno i modelli e il riquadro di delimitazione. – DRiFTy

+2

Penso che dovresti. Perché stai trasformando il tuo bb 2 volte. fai un push/pop all'interno del renderbb. mantenere la proiezione. Se vuoi testare le trasformazioni, non caricare l'identità e non chiamare mul(). In questo modo disegneresti te bb con le stesse trasformazioni del modello te. Dovrebbe funzionare. –

risposta

0

L'ordine moltiplicazione matriciale è calcolata è importante. Puoi invece creare ModelMatrix * Box. Penso che sia il problema.