gpt4 book ai didi

opengl - glLoadIdentity() 在 OpenGL 中做什么?

转载 作者:行者123 更新时间:2023-12-03 04:30:11 26 4
gpt4 key购买 nike

我是 OpenGL 新手,我对代码中的所有随机函数感到有点不知所措。它们有效,我知道何时使用它们,但我不知道为什么需要它们或它们实际做什么。

我知道 glLoadIdentity() 用单位矩阵替换当前矩阵,但这到底是做什么的?如果每个程序都需要它,为什么除非另有说明,否则默认情况下不是单位矩阵?我不喜欢在代码中使用函数,除非我知道它们的作用。我应该指出,我专门为丰富的 2D 客户端使用 OpenGL,所以如果这对于 3D 来说是非常明显的事情,请原谅我的无知。

对于 glMatrixMode(GL_PROJECTION) VS glMatrixMode(GL_MODELVIEW) 也有点困惑。

最佳答案

单位矩阵,就投影和模型 View 矩阵而言,本质上是将矩阵重置回其默认状态。

正如您希望知道的那样,glTranslateglRotate 始终与矩阵的当前状态相关。例如,如果您调用 glTranslate,您将从矩阵的当前“位置”进行翻译,而不是从原点进行翻译。但是,如果您想从原点重新开始,那就需要调用 glLoadIdentity(),然后您可以从现在位于原点的矩阵进行 glTranslate,或者来自矩阵的 glRotate,现在定向为默认方向。

我认为 Boon 的答案(它相当于 1)并不完全正确。矩阵实际上看起来像这样:

1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1

这就是单位矩阵。从数学上讲,布恩是正确的,任何矩阵与该矩阵(或看起来像这样的矩阵;对角线,其他均为 0)相乘都会得到原始矩阵,但我不相信他解释了为什么这很重要。

这很重要的原因是因为 OpenGL 将每个矩阵的所有位置和旋转相乘;因此,当您绘制一个多边形(glBegin(GL_FACE)、某些点、glEnd())时,它会通过将其与 MODELVIEW 相乘来将其转换为“世界空间” ,然后通过将其与 PROJECT 矩阵相乘,将其从 3D 转换为 2D,从而获得屏幕上的 2D 点以及用于绘制像素的深度(来自屏幕“相机”)。但当这些矩阵之一是单位矩阵时,点与单位矩阵相乘,因此不会改变,因此矩阵没有任何作用;它不会平移点,不会旋转点,而是保持原样。

我希望这能澄清一点!

关于opengl - glLoadIdentity() 在 OpenGL 中做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/628796/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com