c++ - 从用四边形绘制的形状转换为用三角形绘制的形状

标签 c++ opengl freeglut

我是一名学生,几周前,我们被要求使用 GL_DRAW_QUADS 等 openGL 命令对 3D 形状进行编程,直到那时我基本上一直在使用四边形来处理所有事情(因为公认它更容易)

我遇到了障碍。我有多个可以用四边形渲染的形状,例如球体和环面,当直接用 GL_QUADS 渲染时,这些当前可以按预期工作

但是,当通过顶点缓冲区存储稍后要渲染的形状时,这是更好的做事方式,我的模型渲染器将只处理由三角形组成的形状。虽然四边形在技术上是两个三角形,但简单地更改我的方法以使用 GL_TRIANGLES、GL_TRIANGLE_FAN 或 GL_TRIANGLE_STRIP 并不能解决我的问题。

我想知道将以四边形绘制的形状转换为三角形的最佳方法是什么,而无需完全重写渲染这些形状的方法。

最佳答案

假设您有一组顶点 {v1,v2,v3,v4,v5,...} 并假设您将索引列表 {i1,i2,i3,i4,i5,...} 传递给draw 命令,你只需要传递一个不同的索引列表。

以前您会传递 {i1,i2,i3,i4} 的地方,现在您可以传递 {i1,i2,i4,i4,i2,i3} 以获得覆盖同一四边形的两个三角形。如果你想要粉丝,事情会变得更复杂。您每四个索引执行相同的过程。

1 -- 2           1 -- 2 
|    |  becomes  |  / |
|    |           | /  |
4 -- 3           4 -- 3

关于c++ - 从用四边形绘制的形状转换为用三角形绘制的形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47273045/

相关文章:

c++ - 如何在 C++ 中制作一个无需复制即可返回静态或自动存储对象的函数?

C++ 编译器抛出 GLUT 错误

opengl - OpenGL 中 2D 鼠标单击导致 3D 坐标不正确?

opengl - 如何使用 GLSL 着色器将径向模糊应用于整个场景?

c++ - 纹理的理解

c++ - 如何在不将 .dll 放在系统文件夹中的情况下安装 freeglut?

c++ - 将 int 和字符串值映射到 Map<Integer, List<String>>

c++ - 在 Visual Studio 中调试时的 Px、Pn

c++ - 前面应该有逗号

opengl - GLSL + OpenGL 远离状态机