2012-10-11 96 views
1

我想创建一个着色器概述2D几何体。我正在使用OpenGL ES2.0。我不想使用卷积滤镜,因为轮廓不依赖于纹理,而且速度太慢(我尝试将纹理几何图形渲染为其他纹理,然后使用卷积着色器进行绘制)。我也尝试过2次传球,第一次是单一着色的超尺度几何体来代表一个oultine,然后正常的在上面画,但是这会导致不同的厚度或未对齐的轮廓。我正在研究如何使用cel-shading中的侧影完成,但它们都是使用法线和灯光进行计算的,我根本不使用它们。2D几何轮廓着色器

我使用Box2D的物理学,并与多个灯具“destructable”对象。在任何时候,一个对象可以被分解(夹具被删除),并且我想要轮廓跟随新的外部计数器。 我正在绘制一个顶点缓冲区,该顶点缓冲区与灯具的顶点,预设纹理坐标和绘制三角形的索引相匹配。当一个夹具被移除时,它在索引缓冲区中的相关索引被设置为0,所以没有再绘制三角形了。 下图显示了一个对象完全完好无损时的外观。 红色点是顶点位置(纹理未显示),黑色线条是灯具,蓝色线条表示三角形的绘制方式。灰色轮廓是我希望大纲在任何情况下看起来像。

1

该图像示出了具有除去几个夹具相同的对象。

2

这是可能的顶点着色器要做到这一点(或与其他简单的方法组合)?任何帮助,将不胜感激。

谢谢:)

回答

0

假设你能够做的东西稍微从角落(例如插页,如果在英语阅读顺序编号的点的尴尬点,第一个是“1 ”,6点会是一个)......

如果点是内部然后如果你列出所有的多边形边连接到它以顺时针方向,每对序列的边缘都会有一个共同的多边形。如果任何两条边没有共同的多边形,那么它就是一个外部点。

从任何外部的角度出发,那么你可以得到由第一步行整个大纲在任何方向和随后沿着连接到您还没有访问过(或外点的任何边缘,或者,是不是边缘你刚才走了)。

从现有的轮廓开始,将某些部分,可以很明显的从用于连接到另一个,但现在没有了,只是从那里走,直到你到其他的无论是外观点开始。

不能在ES下着色器处理这个东西,因为你没有得到连接信息。


我想你可以在着色器做的最好的是向外推的顶点沿其表面法线扩展几何体。假设你的数据结构是一个矩形列表,每个矩形都由一个中心,一个宽度和一个高度来描述,你可以用相同的中心绘制每个矩形,但在宽度和高度上添加少量。

为了完全一般,您需要将法线存储在顶点,还可以在移除几何时更新它们。所以会有一些来自CPU的新信息,但它会相对有限。

+0

您是否试过这种方法? http://www.codeproject.com/Articles/8499/Generating-Outlines-in-OpenGL –

+0

@MichaelIV我把它当作原始的海报所指的“我正在研究cel阴影中的轮廓是如何完成但他们都是使用法线和灯光计算出来的,我根本不使用它们。“ - 他有2D而不是3D。 – Tommy