Таким образом, для быстрой выборки в картинках:Неожиданные летающие ящики, пытаясь оказать
Это нормально:
это после поворота на 180 градусов по обе оси Х или Y оси:
Я не понимаю, почему это происходит вообще. Я использую OpenTK для создания простой сцены физики Bullet. Код прямолинейный, и похоже, что что-то не так в том, как обрабатывается матрица. Это прямо вперед вынести код:
GL.PushMatrix();
GL.MultMatrix(Body.MotionState.WorldTransform.ToArray());
GL.Scale(HalfX * 2, HalfY * 2, HalfZ * 2);
GL.Color4(Color4.Blue);
GL.Begin(PrimitiveType.Lines);
GL.Vertex3(0, 0, 0);
GL.Vertex3(0, 0, 10);
GL.End();
GL.Color4(Color4.Yellow);
GL.Begin(PrimitiveType.Lines);
GL.Vertex3(0, 0, 0);
GL.Vertex3(0, 10, 0);
GL.End();
GL.Color4(Color4.Green);
GL.Begin(PrimitiveType.Lines);
GL.Vertex3(0, 0, 0);
GL.Vertex3(10, 0, 0);
GL.End();
if (Body.ActivationState == ActivationState.ActiveTag)
{
GL.Color4(Color4.Blue);
}
else if (Mass == 0)
{
GL.Color4(Color4.Red);
}
else
{
GL.Color4(Color4.Green);
}
model.Draw();
GL.PopMatrix();
Я попытался разбить его на это компоненты: вектор перевод хорошо, масштабирование хорошо, вращающийся на оси Z появляется хорошо ... это когда вы добавляете ротацию на оси X или Y, с которой он начинает летать. У меня есть выход на консоль: ящик равен ровно 6,9999 по оси Z в обоих изображениях.
Куда я иду не так? Что мне не хватает? Как это исправить?!
Можете ли вы показать код, который вычисляет WorldTransform? (Не связано с ошибкой, но вам нужно только один раз вызвать 'GL.Begin()', 'GL.End()'.) –
Я не могу, это рассчитано Bullet Physics Engine. Я бы рискнул предположить, что это точно, будучи основным двигателем. Помогло бы мне, если бы я показал код разложенной матрицы? (IE, код, где я взял каждую компоненту вектора и применил его отдельно)? – mcmonkey4eva
Итак, Bullet вычисляет матрицу, и вы передаете это прямо в OpenGL через 'GL.MultMatrix()', это правильно? В этом случае OpenTK не изменяет вашу матрицу, она просто передает ее непосредственно драйверу, поэтому проблема может быть несоответствием между Bullet и OpenGL. Отображение разложенной матрицы ops может помочь понять, что происходит неправильно. –