對於我的OpenGL場景中的每個對象,我想添加一個BoundingBox,以便我可以將它們用於簡單的碰撞檢測。爲此我創建了一個簡單的BoundingBox類,如下所示:OpenGL BoundingBox碰撞檢測
public class BoundingBox
{
private float[] mathVector;
public float[] minVector;
public float[] maxVector;
public BoundingBox(float minX, float maxX, float minY, float maxY,float minZ, float maxZ)
{
mathVector = new float[] {0, 0, 0, 0};
minVector = new float[] {minX, minY, minZ, 1};
maxVector = new float[] {maxX, maxY, maxZ, 1};
}
public void recalculate(float[] modelMatrix)
{
Matrix.multiplyMV(mathVector, 0, modelMatrix, 0, minVector, 0);
System.arraycopy(mathVector, 0, minVector, 0, minVector.length);
Matrix.multiplyMV(mathVector, 0, modelMatrix, 0, maxVector, 0);
System.arraycopy(mathVector, 0, maxVector, 0, maxVector.length);
}
public boolean overlap(BoundingBox bb)
{
return (maxVector[0] >= bb.minVector[0] && bb.maxVector[0] >= minVector[0]) &&
(maxVector[1] >= bb.minVector[1] && bb.maxVector[1] >= minVector[1]) &&
(maxVector[2] >= bb.minVector[2] && bb.maxVector[2] >= minVector[2]);
}
}
現在我的問題是重新計算函數並不真正起作用。我認爲它足以將矩陣(因爲存在roatation,位置和sclae)與向量相乘而看起來不夠。重新計算工作還需要做什麼?
啊我想我知道你的意思。所以我需要在最後4點爲一個定向邊界框? – Cilenco 2015-02-08 14:34:39
@Cilenco它*可以*但是當你旋轉一個軸向對齊的盒子時,你會得到一個拉伸的版本,*不是*旋轉的版本,因此你的邊界框會變得比預期的大得多。但這取決於你想要達到什麼目的。 – concept3d 2015-02-08 14:35:02
@Cilenco你需要存儲不同的信息來創建一個OBB,它是一個不同的故事,它取決於你想要達到什麼樣的模擬。 http://gamedev.stackexchange.com/questions/49041/oriented-bounding-box-how-to – concept3d 2015-02-08 14:37:37