2012-12-28 10 views
8

Mam matrycę modelu, której śledzę pozycję siatki w moim świecie. Przy każdym wywołaniu glRotate() i glTranslate() mam odpowiednie wywołanie modelMatrix.rotate() i modelMatrix.translate(), które wydaje się działać poprawnie.Zastosuj transformacje macierzy do BoundingBox

Teraz muszę zaktualizować ramkę ograniczającą związaną z każdym z moich modeli. Pracuję w środowisku libGDX i w klasie BoundingBox istnieje metoda, która powinna umożliwić mi zastosowanie macierzy do ramki ograniczającej, ale wartości nie są poprawnie aktualizowane i myślę, że może to być sposób w jaki jestem próbuje go zastosować. Jakieś pomysły?

Oto moja odpowiedni kod:

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

Tylko dla pewności, czy ładujesz tożsamość przed rysowaniem ramki ograniczającej? –

+0

Nie, nie mam żadnych wywołań do 'glLoadIdentity()', dopóki nie narysuję modeli i obwiedni. – DRiFTy

+2

Myślę, że powinieneś. Ponieważ przekształcasz swoją bb 2 razy. wykonaj push/pop wewnątrz renderbb. zachowaj projekcję. Jeśli chcesz przetestować todo, transformacje nie ładują tożsamości i nie wywołuj mul(). W ten sposób będziesz rysował te bb z tymi samymi przekształceniami co model. Powinno działać. –

Odpowiedz

0

Kolejność że mnożenie macierzy jest obliczany jest ważne. Czy możesz zamiast tego zrobić ModelMatrix * Box. Myślę, że to jest problem.

Powiązane problemy