gpt4 book ai didi

c++ - 多个模型 View 矩阵

转载 作者:行者123 更新时间:2023-11-30 04:07:58 25 4
gpt4 key购买 nike

我正在关注 opengl-tutorial.org 上的 OpenGL 教程,在教程 4 中,作者建议将两个“对象”发送到 OpenGL,而我们之前只渲染过一个对象。具体来说,他问这个:

Draw the cube AND the triangle, at different locations. You will need to generate 2 MVP matrices, to make 2 draw calls in the main loop, but only 1 shader is required.

我们这样定义MVP矩阵:

GLuint MatrixID = glGetUniformLocation(programID, "MVP");
glm::mat4 Projection = glm::perspective(90.0f, 4.0f / 3.0f, 0.1f, 100.0f);

// Camera matrix
glm::mat4 View = glm::lookAt(
glm::vec3(0,0,3), // Camera is at (4,3,3), in World Space
glm::vec3(0,0,0), // and looks at the origin
glm::vec3(0,1,0) // Head is up (set to 0,-1,0 to look upside-down)
);
glm::mat4 Model = glm::mat4(1.0f);
glm::mat4 MVP = Projection * View * Model;

现在我明白每个对象只使用一个 MVP 矩阵。但我有几个问题。

  1. 如何为每个对象创建一个 MVP 矩阵?我是否必须为每个对象重新创建 View 和模型矩阵(IE 为每个对象指定一个新矩阵)?

  2. 我认为 glm::lookAt 被用作各种“相机”,所以我不应该为每个对象创建一个新的“相机”,对吗?

  3. 模型 矩阵有什么作用?作者现在说它是一个单位矩阵,但如果我把它改成 100,什么也不会发生!我认为 Model 矩阵是定义模型渲染位置的矩阵,但我似乎无法在不修改 View 矩阵的情况下更改模型渲染位置(这是有道理的)。

最佳答案

通常,每个“相机”使用一个投影和一个 View 矩阵。 View 矩阵基本上表示相机的位置和方向,而投影矩阵表示相机的属性(视野、纵横比等),在某种程度上类似于真实相机的“镜头”,但不要拉伸(stretch)这个类比太过分了)。

模型矩阵通常用于将模型放置在某些全局“世界坐标系”中。因此,每个对象都需要一个模型矩阵,这样每个对象都可以独立放置。

世界坐标系统根本不需要。对生成的图片重要的是对象如何相对于相机放置 - 即 ModelView 进入图片 - 作为模型和 View 变换的组合,直接从对象空间进入一些相机相关的眼睛空间,绕过任何“世界空间”完全。

在您的情况下,您甚至可以将其与投影矩阵进一步结合,因此您可以直接从对象空间转到裁剪空间。

如您所见,MVP 矩阵需要在组成它的不同矩阵发生变化时发生变化。理论上你可以预先计算每个对象的 MVP - 但通常不会这样做,因为相机是可移动的并且所有这些 MVP 矩阵无论如何都必须重新计算 - 有这里没什么可节省的。因此,人们通常将这些矩阵分开,并在绘制调用之前直接将它们相乘。

What does the Model matrix do? The author says it is a identity matrix right now, but if I change that to say 100, nothing happens!

这甚至是什么意思,“将矩阵更改为 100”?从上面的代码片段可以看出你的模型矩阵确实被使用了并且影响了MVP矩阵。所以改变它应该会产生影响——当然,这取决于你改变了什么。如果你只是改变了线路

glm::mat4 Model = glm::mat4(1.0f);

glm::mat4 Model = glm::mat4(100.0f);

那么它实际上不会导致任何可观察到的变化。你会得到不同的剪辑空间坐标,但差异会相互抵消,生成的图像会是相同的。那将是由于齐次坐标的工作原理,并且完全是另一回事。

关于c++ - 多个模型 View 矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22115268/

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