2012-12-28 29 views
8

Dünyadaki kafesin konumunu izlemek için kullandığım bir model matrisi var. Her bir çağrı glRotate() ve glTranslate() ile düzgün bir şekilde çalışıyor gibi görünen modelMatrix.rotate() ve modelMatrix.translate() için uygun bir çağrı var.Matris Dönüşümlerini BoundingBox'a Uygula

Şimdi, modellerimin her biriyle ilişkilendirilmiş sınırlayıcı kutuyu güncellemem gerekiyor. LibGDX çerçevesinde çalışıyorum ve BoundingBox sınıfında found here, mul() bir sınırlama kutusuna bir matris uygulamasına izin vermeme izin veren bir yöntem var, ancak değerler doğru şekilde güncellenmiyor ve bence bu şekilde olabilir. uygulamak için çalışıyor. Herhangi bir fikir?

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

Sadece emin olmak için, sınırlayıcı kutunuzu çizmeden önce bir kimlik mi yüklüyorsunuz? –

+0

Hayır, modelleri ve sınırlayıcı kutuyu çizene kadar "glLoadIdentity()" çağrısına sahip değilim. – DRiFTy

+2

Sanırım yapmalısın. Çünkü bb'nizi 2 kez dönüştürüyorsunuz. renderbb içinde bir itme/pop yapmak. projeksiyonu koru. Eğer test etmek istiyorsanız, dönüşümler kimliği yüklemez ve mul() 'ı çağırma. Böylelikle te modeli ile aynı dönüşüme sahip olursunuz. Çalışmalı. –

cevap

0

matris çarpım hesaplanan anlamına sırası önemlidir:

İşte benim alakalı kodudur. Bunun yerine ModelMatrix * Box'ı yapabilir misiniz? Bence sorun bu.