opengl着色器中的多边形镶嵌

Posted

技术标签:

【中文标题】opengl着色器中的多边形镶嵌【英文标题】:polygon tessellation in opengl shader 【发布时间】:2010-01-13 07:16:46 【问题描述】:

我希望在 opengl 中使用轮廓和填充渲染 20k+ 2D 多边形。

有些多边形是凹的。

是否可以使用着色器来做到这一点?

【问题讨论】:

【参考方案1】:

您不需要为此使用着色器:

glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); //Fill
glDrawElements(...);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); //Outline
glDrawElements(...);

如果多边形是凹面的,则必须手动或使用 gl 实用程序库 glu 对它们进行镶嵌。看看gluNewTess。如果您决定自己对多边形进行细分,则必须记住设置正确的边缘标志,以便不会渲染细分的内部边缘,请参阅glEdgeFlagPointer

编辑:我找到了以下link,了解如何使用模板缓冲区来渲染凹多边形。

【讨论】:

如果某些多边形是凹的? 谢谢!会尝试。但是,曲面细分必须在 CPU 上完成,而不是使用着色器? @madcat 通常是的,在未来版本的几何着色器中可能可以在 GPU 上执行,但我现在不认为可能。但是,我发现了一种使用模板缓冲区渲染凹多边形的有趣方法,请参阅更新。 模具方法在这里解释得更好:fly.srk.fer.hr/~unreal/theredbook/chapter13.html(搜索凹面)。它涉及将多边形绘制为三角形扇形两次,第一次生成模板缓冲区,第二次绘制设置模板的位置。 gluNewTess 现已弃用,实现这一目标的现代方法是什么?

以上是关于opengl着色器中的多边形镶嵌的主要内容,如果未能解决你的问题,请参考以下文章

着色器中的 OpenGL 法线变换

片段着色器中的OpenGL点精灵旋转

OpenGL 计算着色器中的样本深度缓冲区

从 YouTube 复制的 OpenGL 着色器中的语法错误

C ++ / OpenGL glm无法将矩阵插入着色器中的统一

为啥我的三角形在镶嵌后不显示? OpenGL