我正在尝试学习(现代)OpenGL,但我对各种转换感到非常困惑......
查看矩阵让我感到困惑,所以我需要澄清一下。
这是我对(传统)管道的理解。
- 顶点在世界空间中指定,使用建模矩阵将其缩放、平移、旋转等到所需位置
- (这就是我开始感到困惑的地方)我们可以(可选地)使用“lookAt”函数(gluLookAt)将虚拟相机定位在所需的位置。我在这里遵循了矩阵的推导:http ://www.youtube.com/watch?v=s9FhcvjM7Hk 。直到教授计算“查看”向量为止,我都明白了。他说观察向量=眼睛-中心。现在这里是我开始迷路的地方。我的第一直觉是向量应该是中心 - 眼睛。假设中心向量为 (0,0,0),眼睛向量为 (0,0,5)。要查看对象,相机应指向中心 - eye = (0,0,-5)。但是,教授说我们想将 center - eye 移动到 -z 方向(这是什么意思?)。因此,眼睛中心将给出观察方向。我对此感到困惑。他进一步补充说,在 OpenGL 中,在原点处有一个摄像头在看 (0,0,-1)。现在,这是我完全不明白的。我确实了解查看转换只不过是对对象应用逆变换。我做了一点实验,发现当我绘制一个 z 值为 1 的三角形(并且绝对没有模型视图/投影变换)时,它仍然绘制在屏幕上。但是,我不希望会这样,因为相机位于原点。
现在,总结...
- 为什么看=眼睛-中心?
- 相机在原点并看着 z=-1 是怎么回事?
任何解释/指针?