2012-11-27 25 views
1

我的目标是在柏油路上绘制白色线条。由于道路的特性发生变化,所以不能只有代表沥青和白线的纹理。 当前的方法是应用沥青纹理并在其他两个纹理坐标中编码一些信息。在像素着色器中,读取这些坐标,我决定该片段是否应该是白色的。在纹理顶部绘制程序线,避免在glsl中出现锯齿

这会导致高水平的别名。这就是我想要解决的问题。

我一直在改变应用smothsetp或线性插值线的“白度”。我也根据距相机的距离改变了宽度和颜色。这有点帮助,但是在很远的距离,仍然存在丑陋的锯齿线。

你会怎么做呢?有纹理表示平滑的白线并访问纹理元素会更好吗?我应该使用双线性滤波器来访问相邻的纹素吗?

+0

您能否详细介绍一下“道路变化的原因,所以我不能使用代表沥青和白线的纹理”?为什么你不能从预渲染的集合中选择正确的纹理并将它们拼接在一起?也许我们可以提出一种方法来克服你在这方面遇到的问题,将“白线”问题默认为普通的纹理。 –

+0

至于实际的问题,你可以尝试使用Humus(http://www.humus.name/index.php?page=3D&ID=84)勾画出的贴花技术,但只应用于白线(如你已经覆盖了沥青)。 –

+0

谢谢@ Paul-Jan 我会仔细检查链接,看起来很有希望。 至于另一个问题: 道路可以在运行时由用户编辑(宽度,车道数量,路口,涂漆的签名......)。 要做到这一点,只能创建一堆纹理并将它们正确地附着在几何体上,但我认为改变编码方式(通过额外的纹理坐标传递)会更容易和更灵活。我可能在那里采取了错误的做法,但到​​目前为止,除了别名之外,我一直在取得好成绩。 – josepcn

回答

1

你应该简单地使用2个2坐标的纹理。

  1. 小无缝沥青纹理平铺在道路多边形。
  2. 阿尔法织唛,你会放在这个多边形的中间(纹理坐标偏移)

或者你可以在马路中间产生额外的多边形的标记,以避免任何混淆。

为了使它看起来真实,你可以申请Texture Bombing污垢和裂缝。

+0

谢谢@JAre, 这几乎是我认为可以实现的标准方法,但这意味着要重新绘制道路绘图上的大部分代码(这仍有可能)。 这样我就可以深入了解着色器上的绘图: 有没有一种方法可以通过对纹理进行采样来获取沥青颜色,然后计算该片段是否为白线的一部分,然后将该结果应用于最终颜色反锯齿的方式?这可能吗?如果是这样,你会说是值得的吗?将应用后处理AA的帮助?或者可以更好地使用纹理重做整个事物? – josepcn

+0

@ user1854147对于后处理AA,您需要边缘(正常\深度斜率),对不对?你可以尝试使它看起来更加清晰后处理。但通常使用标准纹理映射完成。你可以用程序的方式用着色器来完成,但很难写,甚至更难以延伸。例如,如果从两侧足够远(基于纹理坐标值),则可以测试片段(在片段着色器中),然后它是白色的。但是通过这种方式,你的着色器可能会变得太胖,特别是如果你使用分支。您也可以将条纹作为单独的几何体与道路上的一小部分实现 – JAre