Opengl 在纹理顶部绘制程序线以避免glsl中的锯齿

Opengl 在纹理顶部绘制程序线以避免glsl中的锯齿,opengl,graphics,3d,glsl,aliasing,Opengl,Graphics,3d,Glsl,Aliasing,我的目标是在沥青路面上画白线。由于道路的特性会发生变化,因此不能仅使用表示沥青和白线的纹理。 当前的方法是应用沥青纹理,并在其他两个纹理坐标中编码一些信息。在像素着色器中,读取这些坐标,我决定该片段是否应为白色 这会导致高级别的混叠。这就是我想要解决的问题 我一直在使用smothsetp或线性插值来改变线条的“白度”。我也改变了宽度和颜色根据距离相机。这有一点帮助,但在很远的距离,仍然有丑陋的锯齿线 你将如何继续这样做?使用表示平滑白线的纹理并访问纹理是否更好?我应该实现一个双线性过滤器来访问相

我的目标是在沥青路面上画白线。由于道路的特性会发生变化,因此不能仅使用表示沥青和白线的纹理。 当前的方法是应用沥青纹理,并在其他两个纹理坐标中编码一些信息。在像素着色器中,读取这些坐标,我决定该片段是否应为白色

这会导致高级别的混叠。这就是我想要解决的问题

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


你将如何继续这样做?使用表示平滑白线的纹理并访问纹理是否更好?我应该实现一个双线性过滤器来访问相邻的纹理吗?

你应该简单地使用两个纹理和两个坐标

  • 小型无缝沥青纹理,铺在道路多边形上
  • 使用将放置在此多边形中间的alpha标记纹理(使用纹理坐标偏移)
  • 或者你可以在道路中间创建额外的多边形来避免任何混淆。


    为了让一切看起来真实,你可以使用污垢和裂缝。

    你只需使用2个纹理和2个坐标即可

  • 小型无缝沥青纹理,铺在道路多边形上
  • 使用将放置在此多边形中间的alpha标记纹理(使用纹理坐标偏移)
  • 或者你可以在道路中间创建额外的多边形来避免任何混淆。


    为了让一切看起来真实,你可以用泥土和裂缝来涂抹。

    你能详细说明一下“道路的性质发生了变化,所以我不能使用代表沥青和白线的纹理”这一点吗?为什么不能从预渲染集中拾取正确的纹理并将它们缝合在一起?也许我们可以建议一种方法来克服您在该领域遇到的问题,将“绘制白线”问题默认为普通纹理。至于实际问题,您可以尝试使用Humus()绘制的贴花技术,但仅将其应用于白线(因为您已经覆盖了沥青块).谢谢@Paul Jan我会彻底检查该链接,看起来很有希望。至于另一个问题:用户可以在运行时编辑道路(宽度、车道数、交叉口、涂漆标志……)。必须有一种方法,只创建一组纹理并在几何体上正确地附加它们,但我认为更改编码(通过额外的纹理坐标传递)会更容易、更灵活。我可能在那里采取了错误的方法,但到目前为止,除了别名,我在这方面一直取得了很好的效果。你能详细介绍一下“道路的特性发生了变化,所以我不能使用表示沥青和白线的纹理”这一点吗?为什么不能从预渲染集中拾取正确的纹理并将它们缝合在一起?也许我们可以建议一种方法来克服您在该领域遇到的问题,将“绘制白线”问题默认为普通纹理。至于实际问题,您可以尝试使用Humus()绘制的贴花技术,但仅将其应用于白线(因为您已经覆盖了沥青块).谢谢@Paul Jan我会彻底检查该链接,看起来很有希望。至于另一个问题:用户可以在运行时编辑道路(宽度、车道数、交叉口、涂漆标志……)。必须有一种方法,只创建一组纹理并在几何体上正确地附加它们,但我认为更改编码(通过额外的纹理坐标传递)会更容易、更灵活。我可能在那里采取了错误的方法,但到目前为止,除了别名之外,我在使用它方面取得了很好的效果。谢谢@JAre,这几乎是我认为可以实现的标准方法,但这意味着在道路绘制上重做大部分代码(这仍然是一种可能性)。这样我就可以进一步探索着色器上的绘制:有没有一种方法可以通过采样纹理来获取沥青颜色,然后计算该片段是否是白线的一部分,并以抗锯齿的方式将结果应用于最终颜色?那有可能吗?如果是这样的话,你觉得值得吗?申请后处理AA会有帮助吗?或者使用纹理重做整个过程可能更好?@user1854147对于后期处理AA,您需要边缘(正常\深度坡度),对吗?您可以尝试通过后期处理使其看起来更清晰。但通常它是通过标准纹理贴图完成的。您可以用程序化的方式使用着色器,但它很难编写,甚至更难扩展。例如,您可以测试片段(在片段着色器中),如果它距离两侧足够远(基于纹理坐标值),则该片段为白色。但这样,着色器可能会变得太胖,尤其是在使用分支时。此外,您还可以将条纹实现为单独的几何体,并从道路上设置一小部分感谢@JAre,这几乎是我认为可以实现的标准方法,但这将意味着在道路绘图上重做大部分代码(这仍然是可能的)。这样我就可以进一步探索着色器上的绘制:有没有一种方法可以通过采样纹理来获取沥青颜色,然后计算该片段是否是白线的一部分,并以抗锯齿的方式将结果应用于最终颜色?那有可能吗?如果是这样的话,你觉得值得吗?申请后处理AA会有帮助吗?或者使用纹理重做整个过程可能更好?@user1854147对于后期处理AA,您需要边缘(正常\深度坡度),对吗?您可以尝试使用post pro使其看起来更清晰