2011-01-07 104 views
2

我已經在Java中使用位置矢量和三個方向矢量實現了一個相機,所以我可以使用gluLookAt();在'幽靈模式'中移動工作得很好,但我想添加碰撞檢測。我似乎無法弄清楚如何將我的位置向量轉換爲OpenGL繪製我的對象的座標。從相機獲取對象座標

我拉環的草圖是這樣的:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
glLoadIdentity(); 
camera.setView(); 
drawer.drawTheScene(); 

我在如何進行損失;看看調用和我的位置矢量之間的ModelView矩陣,我還沒有發現任何一種相關性。

回答

2

最後通過再次檢查http://fly.cc.fer.hr/~unreal/theredbook/chapter03.html來計算出它。要從眼睛空間(相機)到物體空間,必須將該矢量與ModelView矩陣的逆矩陣或代碼相乘:

Vector4f vpos = new Vector4f(0, 0, 0, 1); 
// (0,0,0,1) because it's relative to the cam 
float mv[]=new float[16]; 
ByteBuffer temp = ByteBuffer.allocateDirect(64); 
temp.order(ByteOrder.nativeOrder()); 
GL11.glGetFloat(GL11.GL_MODELVIEW_MATRIX, (FloatBuffer)temp.asFloatBuffer()); 
temp.asFloatBuffer().get(mv); 
Matrix4f m4 = new Matrix4f(); 
m4.load((FloatBuffer)temp.asFloatBuffer()); 
m4.invert(); 
vpos = Matrix4f.transform(m4, vpos, vpos); 
+0

請不要濫用OpenGL作爲數學庫。僅供參考:所有這些矩陣函數都已從OpenGL-3中刪除。你應該自己做矩陣的東西或者使用數學庫。大多數物理圖書館也做這些矩陣的東西,所以你得到兩個:數學和碰撞檢測。 – datenwolf 2011-01-07 18:54:13