открыть позиции после glRotatef и glTranslatef - PullRequest
1 голос
/ 01 июля 2011

Я новичок в OpenGL ES.Может вы мне поможете рассчитать мировые координаты куба после поворота и перевода.Например:сначала я вращаю куб:gl.glRotatef (90, 1, 0, 0);чем изменить свою позициюgl.glTranslatef (10, 0, 0);Как я могу рассчитать его "новые" мировые координаты?Я читал о glGetFloatv (GL_MODELVIEW_MATRIX, матрица), но не понимаю этого.Может быть, кто-то может предоставить пример кода. EDIT: Я нашел решение.Код Android float[] matrix = new float[] {<br/> 1,0,0,0,<br/> 0,1,0,0,<br/> 0,0,1,0,<br/> 0,0,0,1,<br/> };<br/> Matrix.rotateM(matrix, 0, rx, 1, 0, 0);<br/> Matrix.rotateM(matrix, 0, ry, 0, 1, 0);<br/> Matrix.rotateM(matrix, 0, rz, 0, 0, 1);<br/> Matrix.translateM(matrix, 0, x, y, z);<br/> x = matrix[12];<br/> y = matrix[13];<br/> z = matrix[14];<br/> Спасибо за ответы.

1 Ответ

0 голосов
/ 04 июля 2011

Хотя у вас есть ответ на ту часть, которую вы хотите, с точки зрения остальной части вашего вопроса, вы бы сделали что-то вроде (пожалуйста, прости меня, если я делаю какие-либо ошибки Java, я на самом деле не Android человек):

float[] matrix = new float[16];

gl.glGetFloatv(GL_MODELVIEW_MATRIX, matrix);

// check out matrix[12], matrix[13] and matrix[14] now for the world location
// that (0, 0, 0) [, 1)] would be mapped to

То, что getFloatv просто считывает текущее значение матрицы просмотра модели в указанный буфер с плавающей запятой.В OpenGL матрицы 4x4 указаны так, что индекс 0 - это верхний левый угол, индекс 3 - это самый низкий номер в первом столбце, а 12 - номер, самый дальний справа в первом ряду.Обычно это называется макетом для столбцов, хотя FAQ по OpenGL не совсем устраивает этот термин.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...