内部轮廓着色器算法

时间:2014-10-12 04:43:22

标签: opengl directx glsl shader hlsl

我一直在尝试创建一个厚度可以增长的内部轮廓着色器。

我尝试了几件事。

  1. 检查周围的像素,如果它们是透明的,则将当前像素的颜色设置为黑色(或选择的轮廓颜色)。如果我想控制轮廓的粗细,我需要检查当前像素(北,南,东,西,西北,东北等)每个方向的n个像素,其中n是所需的厚度。我遇到了这种方法的性能问题。

  2. 复制图像,然后缩小图像以控制轮廓粗细。这个较小的副本之外的东西是黑色(轮廓颜色),内部的东西设置为原始图像。这只适用于基本形状,想象一个带有空心中心的圆环形图像,收缩图像会勾勒出外环而不是内环。

  3. 与(2)相同,但不是缩小副本,只是模糊副本(控制厚度),然后修剪任何alpha!= 1的像素。这是最好的,但它并不完美复杂的形状。当我希望它保持一致时,某些区域的笔划会比其他区域更粗。

  4. 我可以尝试其他什么算法?什么是一般方法,photoshop如何实现它?我的第一个算法是三个中最精确的算法,但我无法使其适用于像素着色器2,因为它需要循环。

1 个答案:

答案 0 :(得分:0)

您可以创建另一个网格""或"内部网格"。即一个网格,在原始网格中到处都是所需的半径。

然后将其渲染到模板缓冲区,然后在没有设置模板位的情况下使用轮廓颜色渲染原始网格。 Like in the stencil outlining.

你需要一个新的"内部网格"对于每个不同的内部轮廓厚度,所以"可成长"很难实现。

相关问题