(Это все в режиме орто, происхождения находится в верхнем левом углу, х положительна справа, у положительно вниз по оси у)C++ OpenGL преобразования координаты модели в мировой системе координат для обнаружения столкновений
I имеют прямоугольник в мировом пространстве, который может иметь поворот m_rotation (в градусах).
Я могу работать с прямоугольником в порядке, вращать, масштабировать, все, что вы могли бы хотеть этого сделать.
Часть, с которой я действительно запуталась, вычисляет координаты мира прямоугольников из ее локальных координат.
Я пытался использовать формулу:
x' = x*cos(t) - y*sin(t)
y' = x*sin(t) + y*cos(t)
where (x, y) are the original points,
(x', y') are the rotated coordinates,
and t is the angle measured in radians
from the x-axis. The rotation is
counter-clockwise as written.
-credits duffymo
Я попытался реализации формулу так:
//GLfloat Ax = getLocalVertices()[BOTTOM_LEFT].x * cosf(DEG_TO_RAD(m_orientation)) - getLocalVertices()[BOTTOM_LEFT].y * sinf(DEG_TO_RAD(m_orientation));
//GLfloat Ay = getLocalVertices()[BOTTOM_LEFT].x * sinf(DEG_TO_RAD(m_orientation)) + getLocalVertices()[BOTTOM_LEFT].y * cosf(DEG_TO_RAD(m_orientation));
//Vector3D BL = Vector3D(Ax,Ay,0);
я создаю вектор для переведенного точки, хранить его в прямоугольники переменная члена world_vertice. Хорошо. Однако в моем основном рисовальном цикле я рисую строку из (0,0,0) в вектор BL, и кажется, что линия идет по кругу из точки на прямоугольнике (нижний левый угол прямоугольника) вокруг происхождения координат мира.
В основном, когда m_orientation становится больше, он рисует огромный круг вокруг (0,0,0) мировой системы координат. Редактирование: когда m_orientation = 360, он получает значение на 0.
Я чувствую, что я делаю эту часть неправильно:
и т угол в радианах от оси х.
Возможно, я не должен использовать m_orientation (угол поворота прямоугольников) в этой формуле?
Спасибо!
изменить: причина, по которой я делаю это, - это обнаружение столкновения. Мне нужно знать, где координаты прямоугольников (скоро быть твердыми телами) лежат в мировом координатном месте для обнаружения столкновения.
спасибо. Я буду работать над этим позже сегодня вечером! :) –
OpenGL обрабатывает графику, а не операции линейной алгебры. Если ему нужны преобразованные координаты для обнаружения столкновений, это, по моему мнению, плохой совет. Но +1 для хорошего объяснения. Если вы используете OpenGL для преобразования сетки во время фактического рендеринга, не забудьте вращаться вокруг оси Z. – 2009-10-08 23:50:34