gpt4 book ai didi

opengl - 使用多个 openGL VBO 绘制多个模型

转载 作者:行者123 更新时间:2023-12-04 00:50:11 29 4
gpt4 key购买 nike

我不会发布大量代码,而是直观地表达这个问题。我希望你明白我在说什么。

我正在制作一个游戏,在代码中我有一个模型类,它加载一个模型并为其设置 VBO。

在加载函数中,它生成一个新的 VBO ID,并通过绑定(bind)等方式将文件中的顶点数据加载到该缓冲区中。(这工作正常)

在程序开始时,我制作了一个模型对象并加载了一个 .obj 文件。

在渲染函数中,我只是调用 DrawArrays() 函数(带有必要的额外内容),正如我所说,一切正常因为模型出现在屏幕上没有问题。

然而,问题是当我在程序开始时制作两个模型对象并将不同的 .obj 文件加载到每个模型对象中时。

问题是当我玩的时候,屏幕上只绘制了第二个模型。

问题是因为我没有正确理解 VBO 的工作原理。

这就是我“认为”VBO 工作的方式。

您可以根据需要生成任意数量的 VBO ID。
您可以绑定(bind)每个 ID 以使其成为事件缓冲区。
您可以将顶点数据加载到该缓冲区中。
您现在有效地拥有许多不同的 ID,每个 ID 都引用“一组顶点数据”。
通过调用 DrawArray 函数,它会绘制您生成的每个缓冲区(有效地在屏幕上显示所有模型)

现在我知道这是错误的,因为在我有限的理解中,我看不到如何打开/关闭模型。但是无论我看多少教程我都无法回答这个问题,因为它们都专注于。显示第一个 VBO ,顺便说一句,我可以做到。

所以......如果这是有道理的,任何人都可以启发我吗?

最佳答案

按照以下步骤渲染模型,假设 model1 顶点存储在 vertexBuffer 中,model2 顶点存储在 vertexBuffer2 中:

glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);        
glVertexAttribPointer(posAttrib, 3, GL_FLOAT, GL_FALSE, 0, 0);
glDrawArrays(GL_TRIANGLES, 0, <no. of vert>);

glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer2);
glVertexAttribPointer(posAttrib, 3, GL_FLOAT, GL_FALSE, 0, 0);
glDrawArrays(GL_TRIANGLES, 0, <no. of vert>);

//swap buffers depending on your windowing toolkit

确保不要在两个模型渲染中间执行 glClear。
祝一切顺利!

关于opengl - 使用多个 openGL VBO 绘制多个模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21513763/

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