Для каждого объекта в моей сцене 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]);
}
}
Моя проблема сейчас в том, что функция Пересчитать реально не работает. Я думал, что достаточно умножить матрицу (потому что там хранится ротация, положение и sclae) с вектором, похоже, что этого недостаточно. Что мне еще нужно сделать, чтобы выполнить перерасчет?
А я думаю, я знаю, что вы имеете в виду. Итак, мне нужно, наконец, 4 очка для ориентированной ограничивающей рамки? – Cilenco
@Cilenco It * can *, но когда вы поворачиваете выровненную в осевом направлении коробку, вы получите растянутую версию, * не * повернутую версию, и, следовательно, ваша ограничивающая коробка станет намного больше, чем предполагалось. Но это зависит от того, чего вы пытаетесь достичь. – concept3d
@Cilenco Вам нужно хранить различную информацию, чтобы создать OBB, свою историю, и это зависит от того, какую симуляцию вы хотите достичь. http://gamedev.stackexchange.com/questions/49041/oriented-bounding-box-how-to – concept3d