繁体   English   中英

2D几何轮廓着色器

[英]2D geometry outline shader

我想创建一个着色器以概述2D几何。 我正在使用OpenGL ES2.0。 我不想使用卷积滤镜,因为轮廓不依赖于纹理,而且速度太慢(我尝试将带纹理的几何体渲染为另一种纹理,然后使用卷积着色器进行绘制)。 我还尝试了2次遍历,首先是单色上标过比例的几何图形来表示一个输卵管,然后是顶部的法线绘制,但这会导致厚度不同或轮廓未对齐。 我正在研究cel阴影中的轮廓是如何完成的,但是它们都是使用法线和光计算的,我根本不使用它们。

我将Box2D用于物理,并且具有带有多个固定装置的“可破坏”对象。 任何时候都可以分解对象(删除固定装置),并且我希望轮廓线跟随新的计数器。 我正在使用顶点缓冲区进行绘制,该顶点缓冲区与灯具的顶点,预设的纹理坐标以及用于绘制三角形的索引相匹配。 移除夹具后,它在索引缓冲区中的关联索引将设置为0,因此不再在此处绘制三角形。 下图显示了一个完整的对象的外观。 红点是顶点位置(未显示纹理),黑线是灯具,蓝线表示三角形的绘制方式。 在任何情况下,灰色轮廓都是我希望轮廓看起来像的样子。

1个

此图显示了相同的对象,但移除了一些固定装置。

2

是否可以在顶点着色器中(或与其他简单方法结合使用)做到这一点? 任何帮助,将不胜感激。

谢谢 :)

假设您能够对那些从角落稍微插入的尴尬点做一些处理(例如,如果您按英语阅读顺序对这些点进行编号,第一个为“ 1”,则点6将为一个)...

如果一个点在内部,则如果您按顺时针顺序列出与其连接的所有多边形边,则按顺序排列的每一对边将有一个共同的多边形。 如果任意两个边没有共同的多边形,则为外部点。

从任何外部点开始,然后通过首先沿任意方向行走,然后沿与尚未访问的外部点相连的任何边缘(或者,这不是您仅沿其走过的边缘)来获得整个轮廓现在)。

从现有轮廓开始并删除一些零件,您显然可以从以前用于连接到另一个但不再连接的任何一个外部点开始,然后从那里步行直到到达另一个。

您无法在ES下的着色器中处理这些内容,因为您没有获得连接信息。


我认为在着色器中最好的方法是通过沿顶点的法线向外推动顶点来扩展其几何形状。 假设您的数据结构是一个矩形列表,每个矩形都由一个中心,一个宽度和一个高度描述,则可以通过绘制具有相同中心的每个矩形,但在宽度和高度上添加少量来实现相同的目的。

要完全概括,您需要将法线存储在顶点上,而且还需要在移除几何图形时对其进行更新。 因此,会有一些来自CPU的新信息推送,但是相对来说是有限的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM