c - 使用 glPrimitiveRestartIndex() 进行曲面 segmentation ?

标签 c opengl glsl shader opengl-4

我正在尝试使用曲面 segmentation 和原始重新启动索引来绘制立方体。通过使用原始重启索引,我可以将索引计数减少到 17,并使用如下所示绘制立方体:

glEnable(GL_PRIMITIVE_RESTART);
glPrimitiveRestartIndex(0xFFFF);
glDrawElements(GL_TRIANGLE_STRIP, 17, GL_UNSIGNED_SHORT, NULL);

所以,在这种情况下,我得到了奇怪的结果,但是用 36 个索引和 GL_TRIANGLES 绘制立方体类型工作得很好。

如何使用 glPrimitiveRestartIndex() 进行 segmentation ?

最佳答案

只有一种基本类型允许进行曲面 segmentation : GL_PATCHES 。所以你不能 segmentation GL_TRIANGLE_STRIP s。您应该已经获得 GL_INVALID_OPERATION渲染时出错。

每个N顶点将被视为要进行 segmentation 的单个面片,其中 N由 TCS 或调用 glPatchParameteri(GL_PATCH_VERTICES, N); 定义。这很像 GL_TRIANGLES :每3个顶点就是一个三角形。每个补丁都与其他路径完全分开。所以如果 N是4,那么绘制8个顶点将生成2个面片。

这意味着使用primitive restart确实没有任何目的。与镶嵌。

关于c - 使用 glPrimitiveRestartIndex() 进行曲面 segmentation ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44875807/

相关文章:

c++ - 打印字符和整数

c++ - 纹理平面上的 OpenGL 光照不工作

c++ - Opengl - GLfloat 未被识别

opengl-es - 如何在OpenGL ES2.0着色器中使用UBO

opengl - 光线追踪四次曲面

c++ - OpenGL 用四边形填充平截头体

c - CUDA 中更快的矩阵乘法

c - 并行运行两个独立的线程

c - C中空结构的大小是多少?

java - 如何在java中使用opengl中的字体?