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();
Tylko dla pewności, czy ładujesz tożsamość przed rysowaniem ramki ograniczającej? –
Nie, nie mam żadnych wywołań do 'glLoadIdentity()', dopóki nie narysuję modeli i obwiedni. – DRiFTy
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ć. –