gpt4 book ai didi

c++ - 在 openGL 中,模型坐标应该在我的 CPU 上计算还是在 GPU 上通过 OpenGL 调用计算?

转载 作者:行者123 更新时间:2023-11-28 05:02:17 34 4
gpt4 key购买 nike

我目前正在尝试了解 openGL。我对矩阵转换背后的数学有很好的理解。所以我想编写一个小型 3D 应用程序,我可以在其中渲染很多很多顶点。会有不同的对象,每个对象都有自己的一组顶点和世界坐标。

要获得我的顶点的实际坐标,我需要将它们乘以对应于我的对象的位置/旋转的变换矩阵。

这是我的问题,我不明白在 OpenGL 中如何通过 GPU 对所有这些顶点进行这些转换。根据我的理解,它会快得多,但我似乎不明白该怎么做。

或者我应该用 CPU 计算每个坐标并用 openGL 绘制变换后的顶点吗?

最佳答案

有几种不同的方法可以解决这个问题,具体取决于您的情况。

人们使用的主要绘图模型如下所示:(我不打算检查确切的语法,但我很确定这是正确的)

//Host Code, draw loop
for(Drawable_Object const& object : objects) {
glm::mat4 mvp;
glm::projection = /*...*/;
glm::view = /*...*/;
glm::model = glm::translate(glm::mat4(1), object.position);//position might be vec3 or vec4
mvp = projection * view * model;
glUniformMatrix1fv(glGetUniformLocation(program, "mvp"), 1, false, glm::value_ptr(mvp));
object.draw();//glDrawArrays, glDrawElements, etc...
}

//GLSL Vertex Shader
layout(location=0) in vec3 vertex;
uniform mat4 mvp;
/*...*/

void main() {
gl_Position = mvp * vec4(vertex, 1);
/*...*/
}

在此模型中,矩阵在主机上计算,然后应用到 GPU 上。这最大限度地减少了需要在 CPU<-->GPU 总线上传递的数据量(虽然这不是经常图形的限制,但可以是一个需要牢记的考虑因素),并且是通常在阅读/解析代码方面是最干净的。

您可以使用多种其他技术(并且,如果您进行实例化渲染,必须使用),但对于大多数应用程序而言,没有必要以任何重大方式偏离此模型.

关于c++ - 在 openGL 中,模型坐标应该在我的 CPU 上计算还是在 GPU 上通过 OpenGL 调用计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45623738/

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