我在OpenGL中做遊戲。遊戲包括一架在3D世界中自由飛行的飛機,它必須經過一些特定的區域,就像它正在通過窗戶一樣。現在,我試圖計算飛機與提到的「窗戶」的碰撞。我認爲,作爲第一種方法,爲飛機的軌跡掃描AABB,併爲每個窗口配置一些AABB,例如如果這些AABB重疊,則有飛機經過它的潛在情況。 但是,當我嘗試計算AABB時,問題就開始了,因爲我所知道的每個算法都需要知道同一參考系統中兩個對象(平面+窗口)的座標。我的程序將世界看作是什麼在移動,而不是以原點爲中心的平面(實際上,在z = -10,因此它被渲染)。真正的問題是如何計算從飛機上看到的每個「窗口」的座標。這是我用來畫場景的代碼:計算AABB碰撞
glLoadIdentity();
//these are the rotations of the plane of the ground
glRotatef(RotHorizont, 0.0f, 0.0f, 1.0f);
glRotatef(-directionX, 1.0f, 0.0f, 0.0f);
glRotatef(-directionY, 0, 1.0f, 0);
//and these are the movement of the plane
//(the multiplication by 0.0174532925f is to convert the angles to radians
Tx -= (float)Math.sin(directionY * 0.0174532925f) * velocity;
Tz -= (float)Math.cos(directionY * 0.0174532925f) * velocity;
Ty -= (float)Math.sin(directionX * 0.0174532925f) * velocity;
glTranslatef(-Tx, Ty, -Tz);
/*
here I draw the ground and the windows
*/
....
//and now I draw the plane
gl.glLoadIdentity();
gl.glTranslatef(0.0f, 0.0f, -10.0f);
/* draw the plane */
那麼,我該如何獲得「窗口」的座標? 或者還有其他方法來計算碰撞? 我真的需要你的幫助,我會非常感激。 謝謝大家!
非常感謝您的回覆!因此,如果我理解正確,我需要爲每個窗口提取模型矩陣,並獲取該點的原點座標? – WaLi
我試過了,得到了一個窗口的模型矩陣(這是正確的,因爲我已經繪製了矩陣的東西)。但是,我怎樣才能從該矩陣提取座標?我認爲把這個矩陣乘以向量'[0; 0; 0; 1]'(代表窗口的原點),它應該給我從原始系統看到的座標,但它不是那樣的。 例如,用這個矩陣,我怎樣才能提取從飛機上看到的座標? '0.967 0.023 0.253 0.000 -0.112 0.933 0.342 0.000 -0.229 -0.360 0.905 0.000 15.392 89。237 -318.202 1.000' – WaLi
首先,我會說使用OOP處理位置/方向信息的類將是一個好主意。 OpenGL只會用來顯示結果。正如你所看到的,碰撞檢測與顯示無關。你不能那樣做嗎?這可能會讓你的生活更輕鬆。 如果你不能,我想你需要應用反轉轉換矩陣來「返回」到適當的參考框架。 – BenC