Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 具有可变索引数的OpenGL元素_C++_Opengl - Fatal编程技术网

C++ 具有可变索引数的OpenGL元素

C++ 具有可变索引数的OpenGL元素,c++,opengl,C++,Opengl,我一直在使用gldrawerelements绘制描述对象的三角形。但是,我正在尝试加载一些我在网上找到的对象,我看到了描述顶点索引的内容: ... 4 195 209 210 196 4 196 210 211 197 3 197 211 15 3 0 212 198 4 198 212 213 199 4 199 213 214 200 ... glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IBO); int size; glGetBufferParameter

我一直在使用
gldrawerelements
绘制描述对象的三角形。但是,我正在尝试加载一些我在网上找到的对象,我看到了描述顶点索引的内容:

...
4 195 209 210 196
4 196 210 211 197
3 197 211 15
3 0 212 198
4 198 212 213 199
4 199 213 214 200
...
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IBO);
int size; glGetBufferParameteriv(GL_ELEMENT_ARRAY_BUFFER, GL_BUFFER_SIZE, &size);
glDrawElements(GL_TRIANGLES, size/sizeof(GLushort), GL_UNSIGNED_SHORT, 0);
我的问题是,如何在由3个顶点索引和4个(以及任何其他数量的索引)描述的绘图元素之间切换。目前,我只能加载使用3个索引来描述顶点的文件:

...
4 195 209 210 196
4 196 210 211 197
3 197 211 15
3 0 212 198
4 198 212 213 199
4 199 213 214 200
...
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IBO);
int size; glGetBufferParameteriv(GL_ELEMENT_ARRAY_BUFFER, GL_BUFFER_SIZE, &size);
glDrawElements(GL_TRIANGLES, size/sizeof(GLushort), GL_UNSIGNED_SHORT, 0);

你的数据集的第一个条目是一个四边形,可以使用顶点{1,2,3}和{1,3,4}(即第一个条目为{195209210}和{195210196})将其分成两个三角形。对数据集中的每个四边形使用相同的方案。如果得到倒三角,请尝试翻转顶点的顺序(例如,{195210209}而不是{195209210})。

只要多边形是凸的,就很容易对它们进行三角剖分。一种方法是将每个多边形拆分为三角形,然后使用基本类型
GL\u triangles
绘制。对于具有
n
顶点的多边形,最终将得到由具有以下基于0的索引的顶点定义的
n-2
三角形:

0 1 2
0 2 3
0 3 4
...
0 n-2 n-1
例如,索引的顺序为:

195 209 210 195 210 196
196 210 211 196 211 197
197 211 15
0 212 198
198 212 213 198 213 199
199 213 214 199 214 200
更优雅的方法是使用基本类型
GL\u TRIANGLE\u FAN
绘制每个多边形。三角形扇形的顶点顺序与多边形的顶点顺序完全相同,因此可以简单地按顺序指定索引:

0 1 2 3 ... n-1
要分离多边形,可以使用“基本体重新启动”。通过以下方式启用它:

glPrimitiveRestartIndex(0xffff);
glEnable(GL_PRIMITIVE_RESTART);
然后在多边形之间插入重新启动索引。例如:

195 209 210 196 0xffff
196 210 211 197 0xffff
197 211 15 0xffff
0 212 198 0xffff
198 212 213 199 0xffff
199 213 214 200

这就是原始类型参数的用途。。。但是我不知道4个元素的列表应该是什么——它们可以是四边形、三角形条带/扇形、直线、点等等。您可以使用
glGetBufferSubData
读取以下N个顶点的序列,以便在IBO中绘制,并迭代调用
gldrawerelements
。这可能是低效的…假设它们是n-gons。三角测量。@jozxyqk你能提供一个到该技术的链接吗?我有点理解你的意思,但是一个具体的例子会很好。@phileaton看到这个:。在文章的底部找到了一个例子。