2012-12-28 35 views
8

Tôi có ma trận mô hình mà tôi đang theo dõi vị trí của lưới trong thế giới của tôi. Với mỗi cuộc gọi đến glRotate()glTranslate() Tôi có một cuộc gọi tương ứng với modelMatrix.rotate()modelMatrix.translate() có vẻ hoạt động chính xác.Áp dụng các phép biến đổi ma trận thành BoundingBox

Bây giờ tôi cần phải cập nhật hộp giới hạn được kết hợp với từng mô hình của tôi. Tôi đang làm việc trong khung libGDX và trong lớpfound here, có phương thức mul() cho phép tôi áp dụng ma trận cho hộp giới hạn nhưng giá trị không được cập nhật chính xác và tôi nghĩ đó có thể là cách tôi cố gắng áp dụng nó. Bất kỳ ý tưởng?

Đây là mã có liên quan của tôi:

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

Để đảm bảo, bạn có đang tải danh tính trước khi vẽ hộp giới hạn của mình không? –

+0

Không, tôi không có bất kỳ lệnh gọi nào tới 'glLoadIdentity()' cho đến sau khi tôi vẽ các mô hình và khung giới hạn. – DRiFTy

+2

Tôi nghĩ bạn nên. Bởi vì bạn đang biến bb của bạn 2 lần. làm một push/pop bên trong renderbb. giữ cho phép chiếu. Nếu bạn muốn todo kiểm tra các biến đổi không tải danh tính và không gọi mul(). Bằng cách đó bạn sẽ vẽ te bb với các biến đổi tương tự như mô hình te. Nên làm việc. –

Trả lời

0

Trình tự mà nhân ma trận được tính là quan trọng. Thay vào đó, bạn có thể làm ModelMatrix * Box. Tôi nghĩ đó là vấn đề.

Các vấn đề liên quan