В настоящее время я пытаюсь создать OBB (Ориентирующая ограничивающая рамка) с использованием источника и математических данных, содержащихся в книге "Обнаружение столкновений в реальном времени".
Одна проблема с кодом, содержащимся в этой книге, заключается в том, что он очень мало объясняет, что параметры означают для методов.
Я пытаюсь выяснить, что мне нужно для подачи моего метода setOBB () (я написал этот). Это выглядит так:
void PhysicalObject::setOBB( Ogre::Vector3 centrePoint, Ogre::Vector3 localAxes[3], Ogre::Vector3 positiveHalfwidthExtents )
{
// Ogre::Vector3 c; // OBB center point
// Ogre::Vector3 u[3]; // Local x-, y-, and z-axes (rotation matrix)
// Ogre::Vector3 e; // Positive halfwidth extents of OBB along each axis
m_obb.c = centrePoint;
m_obb.u[0] = localAxes[0];
m_obb.u[1] = localAxes[1];
m_obb.u[2] = localAxes[2];
m_obb.e = positiveHalfwidthExtents;
}
Глядя на требуемые параметры, первый и третий параметры, я думаю, я понимаю.
- Пройдите в центральное положение объекта.
- Это моя проблема. Я полагаю, что ей нужна матрица, представленная с использованием массива из 3 векторов? а как?
- Вектор, который содержит величину для расстояния между центральной точкой и краем OBB в каждом направлении x, y, z.
Вот что я сейчас делаю:
// Build the OBB
Ogre::Vector3 rotation[3];
Ogre::Vector3 centrePoint = sphere->getPosition();
rotation[0] = ?
rotation[1] = ?
rotation[2] = ?
Ogre::Vector3 halfEdgeLengths = Ogre::Vector3( 1,1,1 );
myObject->setOBB( centrepoint, rotation, halfEdgeLengths );
Как я могу представить матрицу, используя три вектора (чего я не могу избежать при этом). Спасибо.