Преобразовать положение камеры в OpenGL - PullRequest
1 голос
/ 11 января 2011

Я рисую сферу с OpenGL, которая будет преобразована с помощью glRotate (), glScale (), glTranslate ().Как я могу получить абсолютное положение объекта, не рассчитав все преобразования самостоятельно?

Мне нужны координаты для установки положения глаз камеры на эту точку.

Ответы [ 2 ]

2 голосов
/ 11 января 2011

При использовании этих преобразований вы манипулируете modelviewmatrix

Чтобы получить текущее, вы можете использовать (http://linux.die.net/man/3/glgetfloatv)

void glGetFloatv(
GLenum pname,
GLfloat * params
);

например:

float modelview[16];

// save the current modelview matrix
glPushMatrix();

// get the current modelview matrix
glGetFloatv(GL_MODELVIEW_MATRIX , modelview);

должен получить текущую матрицу, умножение начальных векторов / вершин / координат на эту матрицу даст вам абсолютные мировые координаты.

РЕДАКТИРОВАТЬ: При создании приложенияВы обычно хотите контролировать абсолютные координаты каждого объекта, манипулировать ими и использовать преобразования opengl, чтобы нарисовать их там, где они определены.

1 голос
/ 11 января 2011

Объекты часто моделируются в одной системе координат, затем масштабируются, переводятся и поворачиваются в мир, который вы строите. Мировые координаты являются результатом преобразования объектных координат с помощью преобразований моделирования, сохраненных в матрице ModelView. Тем не менее, OpenGL не имеет понятия мировых координат. Мировые координаты являются чисто прикладной конструкцией.

Координаты объекта преобразуются матрицей ModelView для получения координат глаза.

с opengl.org: 9.120 Как найти координаты вершины, преобразованной только матрицей ModelView?

Часто бывает полезно получить значение координатной точки глаза для вершины (то есть вершины пространства объекта, преобразованной матрицей ModelView). Вы можете получить это, извлекая текущую матрицу ModelView и выполняя простое умножение вектора на матрицу.

Чтобы получить матрицу, используйте что-то вроде этого

float fvViewMatrix[ 16 ];

glGetFloatv( GL_MODELVIEW_MATRIX, fvViewMatrix );

Подробнее о преобразованиях opengl можно прочитать здесь: http://www.opengl.org/resources/faq/technical/transformations.htm

...