gpt4 book ai didi

c++ - 从 glLookAt() 到 glRotatef() 和 gltranslatef

转载 作者:行者123 更新时间:2023-11-28 02:49:33 25 4
gpt4 key购买 nike

我需要用 glRotatef()glTranslatef() 操作替换 gluLookAt() 操作。我设法用 gluLookAt(1,1,0,0,0,0,0,1,0); 来做到这一点,但我只是猜到了一些数字,直到我得到了相同的图片。

这背后的数学原理是什么?我如何获取一些随机的 gluLookAt(eyeX, eyeY, eyeZ, centerX, centerY, centerZ, upZ, upY, upZ) 并将其更改为旋转和平移并获得相同的图片?

最佳答案

gluLookAt (...) 设置 View 空间的轴和原点。

在我看来,考虑每个单独的列代表什么比将此操作转换为一系列平移和旋转要容易得多(即使从根本上说这就是发生的事情)。

要设置 View 空间的方向,gluLookAt (...) 主要计算各个轴。 在任何时候它都曾经处理任何欧拉角,例如 glRotatef (...) 会要求您做。考虑到 gluLookAt (...) 产生的 View 空间是正交的,仅从两个轴计算第三个轴是微不足道的。

  • Z 轴(向前)计算为从眼睛xyz 到中心xyz
  • 的方向
  • Y 轴(向上)给定直接为向上xyz
  • X 轴(右)计算为向上和向前 vector 之间的叉积

然后这三个轴存储在矩阵 X、Y、Z 的第 1-3 列中。

最后,由于观察变换除了旋转之外还有位置,因此相机的视点存储在矩阵的第 4 列中。

考虑下图,来自 Song Ho Ahn (안성호),OpenGL Transformation :

Axes Diagram

老实说,自己设置矩阵比处理欧拉角和 glRotatef (...) 更方便。

关于c++ - 从 glLookAt() 到 glRotatef() 和 gltranslatef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23370126/

25 4 0
文章推荐: javascript - 扩展文本框,需要边距或反页移动
文章推荐: php - IE 中表单中的元素为空
文章推荐: javascript - 当所有