Я создал пуленепробиваемую машину с составным шасси, а состав состоит из 2 корпусов, шасси и башни.
Я могу получить преобразование башни и матрицу opengl следующим образом:
// get chassis and turret transforms
btTransform chassisTransform = m_vehicle->getChassisWorldTransform();
btTransform turretTransform = compound->getChildTransform(1);
// multiply transforms to get updated turret transform
turretTransform *= chassisTransform;
// get turret matrix
btScalar turretMatrix[16];
turretTransform.getOpenGLMatrix(turretMatrix);
Я пытаюсь получить турель вперед / вектор направления из этой матрицы. Мне это нужно, чтобы камера была зафиксирована в положении и направлении башни.
То, что я пробовал, это:
btVector3 turretForwardVector = btVector3(turretMatrix[2], turretMatrix[6], turretMatrix[9]);
Но это не дает мне правильный вектор.
Где именно я должен искать вектор в этой матрице?
Ваше мышление правильно. Достаточно извлечь только строку или столбец vectur. Прямо сейчас в матричной нотации OpenGL вы извлекаете строку Z. Я предлагаю вам попробовать колонку, т.е. turretMatrix[0x8 … 0xb]
Других решений пока нет …