我们在openGL中使用矩阵做什么?

我们在openGL中使用矩阵做什么?,opengl,matrix,Opengl,Matrix,我是OpenGL新手,想知道我们使用矩阵的目的是什么,如果有人能以抽象直观的方式解释我,因为在阅读参考文献或任何教程时,所有这些都将矩阵作为已知的机制。我学过数学中的矩阵,但由于英语不是我的母语,很难理解某些东西的含义 我在www.learnopengl.com上找到了一个很好的例子,上面说: The model matrix. This matrix is used to place a model somewhere in the “world”. For example, if you h

我是OpenGL新手,想知道我们使用矩阵的目的是什么,如果有人能以抽象直观的方式解释我,因为在阅读参考文献或任何教程时,所有这些都将矩阵作为已知的机制。我学过数学中的矩阵,但由于英语不是我的母语,很难理解某些东西的含义

我在www.learnopengl.com上找到了一个很好的例子,上面说:

The model matrix. This matrix is used to place a model somewhere in the “world”. For example, if you have a model of a car and you want it located 1000 meters to the east, you will use the model matrix to do this.
The view matrix. This matrix represents the camera. If we want to view our car which is 1000 meters to the east, we’ll have to move ourselves 1000 meters to the east as well (another way of thinking about it is that we remain stationary, and the rest of the world moves 1000 meters to the west). We use the view matrix to do this.
The projection matrix. Since our screens are flat, we need to do a final transformation to “project” our view onto our screen and get that nice 3D perspective. This is what the projection matrix is used for.
这很好地解释了这一点。但是,我们如何构建它们呢?它们有多大

另外,我在这个问题上读到:

即:

glMatrixMode(GL_投影)处理 透视变换或正交变换

glMatrixMode(GL_MODELVIEW)处理模型视图使用的矩阵 转型也就是说,将对象(又名模型)转换为 视图坐标空间(或摄影机空间)

这些转换意味着什么?它们是如何计算的


我知道这里有很多问题,但我正试图更好地理解所有这些,以便在OpenGL上获得更好的视图。这就是为什么我需要一些抽象的解释来深入了解所有细节,理解概念之外的内容。

OpenGL很好,因为它比直接使用矩阵更好,您可以调用函数来操作矩阵

因此,在幕后(实际发生的情况),有几个矩阵可以变换对象(将对象变换到摄影机空间的模型视图矩阵,以及用于透视/正交变换的投影矩阵)


glMatrixMode
就像一个开关,允许您选择要使用和操作的矩阵类型,并指定使用参数。因此
glMatrixMode(GL_投影)
意味着您将操作投影矩阵

OpenGL的好处在于,与直接处理矩阵不同,您可以调用函数来处理矩阵

因此,在幕后(实际发生的情况),有几个矩阵可以变换对象(将对象变换到摄影机空间的模型视图矩阵,以及用于透视/正交变换的投影矩阵)


glMatrixMode
就像一个开关,允许您选择要使用和操作的矩阵类型,并指定使用参数。因此
glMatrixMode(GL_投影)
意味着您将操作投影矩阵

平移、旋转和缩放都是仿射变换,可以使用矩阵乘法和加法实现。实际上,通过用一个始终为1的
w
元素来扩充向量,3维中的仿射变换就变成了4维中的线性变换,您所需要的只是矩阵乘法

使用矩阵乘法非常好,因为(1)它很快,(2)任何操作都不需要特殊的逻辑——您甚至可以根据需要组合任意多个仿射操作,并且仍然使用单个矩阵表示

组合时,具有多个矩阵模式非常有用。如果只有一个矩阵,则可以在任意一端添加新操作,但不能在中间添加新操作。通过稍后将3个矩阵相乘,可以在顺序中的四个不同点插入新操作


矩阵堆栈也非常有用,因为它允许您对一些基本体执行操作,然后将其删除。如果您试图通过执行反向操作来撤消该操作,则舍入误差最终将失控。但是,只要记住上一个矩阵,就可以像旋转或任何从未发生过的事情一样将其取回。

平移、旋转和缩放都是仿射变换,可以使用矩阵乘法和加法来实现。实际上,通过用一个始终为1的
w
元素来扩充向量,3维中的仿射变换就变成了4维中的线性变换,您所需要的只是矩阵乘法

使用矩阵乘法非常好,因为(1)它很快,(2)任何操作都不需要特殊的逻辑——您甚至可以根据需要组合任意多个仿射操作,并且仍然使用单个矩阵表示

组合时,具有多个矩阵模式非常有用。如果只有一个矩阵,则可以在任意一端添加新操作,但不能在中间添加新操作。通过稍后将3个矩阵相乘,可以在顺序中的四个不同点插入新操作


矩阵堆栈也非常有用,因为它允许您对一些基本体执行操作,然后将其删除。如果您试图通过执行反向操作来撤消该操作,则舍入误差最终将失控。但是,只要记住上一个矩阵,就可以像旋转或任何从未发生过的事情一样将其取回。

它们用于操纵顶点、平移、旋转和缩放。如果你想了解更多,请阅读矩阵代数。你的问题有点像是在问“为什么我需要学习物理来建造一个能按我的意愿飞行的火箭”。有时候你只需要研究和学习一些东西。(附言:我不是那个否决这个问题的人)没关系,我来这里不是为了名誉。我真正需要的是像jh314这样的人,告诉我关于glMatrixMode的两句话,这将使整个内容更容易理解。连接OpenGL概念的小文章。这是一种很好的态度-我曾经问过这些模式的目的是什么,我将把你链接到这个问题上,一些人提供了很好的答案。@EdwardBird谢谢:)它们用于操纵顶点、平移、旋转和缩放。如果你想了解更多,请阅读矩阵代数。你的问题有点像是在问“为什么我需要学习物理来建造一个能按我的意愿飞行的火箭”。有时候你只需要研究和学习一些东西。(附言:我不是