- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 OpenGL 新手,我对代码中的所有随机函数感到有点不知所措。它们有效,我知道何时使用它们,但我不知道为什么需要它们或它们实际做什么。
我知道 glLoadIdentity()
用单位矩阵替换当前矩阵,但这到底是做什么的?如果每个程序都需要它,为什么除非另有说明,否则默认情况下不是单位矩阵?我不喜欢在代码中使用函数,除非我知道它们的作用。我应该指出,我专门为丰富的 2D 客户端使用 OpenGL,所以如果这对于 3D 来说是非常明显的事情,请原谅我的无知。
对于 glMatrixMode(GL_PROJECTION)
VS glMatrixMode(GL_MODELVIEW)
也有点困惑。
最佳答案
单位矩阵,就投影和模型 View 矩阵而言,本质上是将矩阵重置回其默认状态。
正如您希望知道的那样,glTranslate
和 glRotate
始终与矩阵的当前状态相关。例如,如果您调用 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/
我是 OpenGL 新手,我对代码中的所有随机函数感到有点不知所措。它们有效,我知道何时使用它们,但我不知道为什么需要它们或它们实际做什么。 我知道 glLoadIdentity() 用单位矩阵替换当
我开始使用 OpenGL。我不确定 gluOrtho2d 和 glLoadIdentity 如何一起发挥作用。特别是,我有以下代码,它应该在 10x10 显示的中心绘制一个 2x2 的正方形。 int
我刚刚开始使用JOGL,有一些我无法做到的事情:NeHe tutorials中有一个基本绘图和旋转的示例,一切都工作得很好,除了在第一个三角形之后和下一个四边形之前使用的 glLoadIdentity
我正在阅读一本关于 OpenGL、SDL 的书,并且已经阅读了一些 OpenGL 文档。我也读过这篇文章:What does glLoadIdentity() do in OpenGL? 我正在掌握
当对对象应用转换时,我们使用 glPushMatrix/glPopMatrix。但是为什么我们不只使用 glLoadIdentity 呢? 因此 glPushMatrix() ..ap
代码: int err = glGetError(); // err = 0 glMatrixMode(GL_TEXTURE); err = glGetError(); // err
我目前正在尝试将现有的 OpenGL 代码改编为通用 Windows 应用程序,使用应该将 OpenGL 调用转换为 DirectX 的 Angle 组件。给我带来问题的一个基本功能是纹理中四边形的全
我有一个同学写的代码(我们正在做一个项目): //inside cqtopencvviewergl.cpp void CQtOpenCVViewerGl::resizeGL(int width, in
使用 opengl es 演练黑莓 10 sdk。它使用 2 个命令,即: glMatrixMode(GL_PROJECTION); glLoadIdentity(); 及以后: glMatrixMo
我是一名优秀的程序员,十分优秀!