首页 > 解决方案 > 大纲(OpenGL 2.0)

问题描述

据我所知,有两种方法可以勾勒出一组顶点,使用着色器或使用模板缓冲区。

示例 1:模板缓冲区:在此图像中,img1 的轮廓相互重叠,但您可以更改每个轮廓的颜色。

示例 2:着色器:在此图像中,img2 的轮廓不重叠,但您无法更改每个轮廓的颜色。

有没有办法将这两者结合起来,比如改变每个轮廓的颜色但防止它们重叠?

(也忽略我从我的世界中获取图像的事实)

标签: opengl

解决方案


添加轮廓的最简单方法是绘制相同的网格两次:一次正常绘制,一次使用纯色着色器,使用相同的变换(意味着相同的位置,相同的旋转),但稍微放大,并通过更改来翻转其面绘制模型之前的缠绕顺序glFrontFace(GL_CW)(默认为GL_CCW- 逆时针方向)。这会在模型周围创建一种“外壳”,只有其背面可见。正面是透明的(剔除)。

模板方法是“屏蔽”框架的一部分。在这里描述得更好。基本上,您启用模板蒙版,绘制模型(它在模板缓冲区中创建一个与模型形状相同的“孔”,以后绘制片段的位置),然后在框架中再次绘制相同的模型,相同的变换,但略微放大,并带有纯色着色器(例如黄色)。在模板缓冲区中的那个“洞”所在的地方,它会被切割,只留下放大的黄色网格的轮廓部分(或你想要的任何颜色)。

另一种方法是使用有符号距离场 (SDF),通过使用纯色着色器将模型渲染到单独的纹理,然后将其转换为 SDF 并在片段着色器中使用统一来控制放置轮廓的“范围” (例如在 0.0 和 0.05 之间)。零就在模型的边缘,负值在它里面。它通常用于渲染文本,但它可以用于任何东西。视频解释了它们的工作原理。

所有的轮廓方法都可以让您轻松更改颜色。你想开发一个作弊器吗?如果您无法访问游戏的源代码,我无法帮助您。


推荐阅读