Есть ли способ отследить точку после применения преобразований с openGL

0

Я пытаюсь найти способ отслеживать произвольную точку в x, y, z после применения преобразований.

Что-то вроде этого

 glTranslated(0,2,4);
 glScaled(3,4,5);
 glTranslated(2,4,5);
 glRotated(24,0,1,0);
 point = Point(3,4,2)


 printf ("the point is now in %f,%f and %f",point.x,point.y,point.z);

Я использую C с openGL 2.

  • 2
    Конечно, просто примените то же преобразование к точке.
  • 2
    Вы можете записать все преобразования в одну матрицу, а затем получить доступ к ней, чтобы найти новое местоположение любой исходной точки.
Показать ещё 2 комментария
Теги:
opengl

1 ответ

0
Лучший ответ

Если вы не хотите реплицировать, как OpenGL строит и объединяет ваши матрицы, проще всего получить текущую матрицу:

GLfloat mat[16];
glGetFloatv(GL_MODELVIEW_MATRIX, mat);

Затем вы можете умножить эту матрицу на точки, которые вы хотите преобразовать. Помните, что OpenGL хранит матрицы в главном порядке столбцов. Поэтому, чтобы применить его к точке (x, y, z), умножение будет следующим:

xNew = mat[0] * x + mat[4] * y + mat[8] * z + mat[12];
yNew = mat[1] * x + mat[5] * y + mat[9] * z + mat[13];
zNew = mat[2] * x + mat[6] * y + mat[10] * z + mat[14];

Ещё вопросы

Сообщество Overcoder
Наверх
Меню