c++ - 使用顶点缓冲对象渲染不同的三角形类型和三角形扇形? (OpenGL)

标签 c++ opengl graphics 3d vertex-buffer

我的网格中大约一半使用三角形,另一半使用三角形扇形。 我想将它们卸载到顶点缓冲区对象中,但我不太确定如何执行此操作。三角形风扇都有不同数量的顶点……例如,一个可能有 5 个,另一个可能有 7 个。

VBO 使用普通三角形非常简单,但我不确定如何将它们与三角形风扇或不同的三角形类型一起使用。我很确定我需要一个索引缓冲区,但我不太确定我需要做什么。

我知道在运行时有多少个顶点组成每个扇形......我想我可以用它来调用类似 glArrayElement

如有任何帮助,我们将不胜感激!

最佳答案

VBO 和索引缓冲区是正交的东西。 如果您还没有使用索引缓冲区,也许一次移动一个步骤更明智。

那么……关于你的问题。如果你把所有的三角形风扇都放在一个 vbo 中,你唯一需要绘制它们的就是设置你的 vbo 并在其中传递索引以启动你的风扇

   glBindBuffer(GL_VERTEX_BUFFER, buffer);
   glVertexPointer(3, GL_FLOAT, 0, NULL); // 3 floats per vertex
   for each i in fans
       glDrawArrays(GL_TRIANGLE_FAN, indef_of_first_vertex_for_fan[i], fan_vertex_count[i])

编辑:我不得不说,您最好将扇形转换为规则的三角形组,并使用 glDrawArrays(GL_TRIANGLES) 为您的所有三角形。每个基元的调用很少有效率。

关于c++ - 使用顶点缓冲对象渲染不同的三角形类型和三角形扇形? (OpenGL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1569939/

相关文章:

c# - C#中的PNG图像问题

c++ - GRPC:客户端超时

c++ - Sphere online judge 发现我的代码是错误的,尽管它对数百个测试用例都是正确的

java - Canvas 无法在 LWJGL 应用程序中显示

opengl - 图形硬件上的 float 与 double

python - 使用 Graphicsmagick 或 pgmagick 进行洪水填充

c++ - win32 API C++ :How can i color only some text in color?

c++ - 在其成员函数返回之前删除对象是未定义的行为吗?

c++ - 使用 GLUT_3_2_CORE_PROFILE 时出现 OpenGL 错误 1282(无效操作)

linux - 在 Linux 下减少 opengl 3 和 4 帧速率卡顿的技巧