如果您有一个复杂的形状(多边形),并且GL_REPEAT
在 OpenGL ES 2.0 中映射到它的纹理,以及形成多边形边缘的所有点,是否可以做一些使边缘与背景混合的事情?
我的意思是使边缘更平滑的东西,因此纹理形状不会在边缘和角落周围看起来参差不齐。
如果您有一个复杂的形状(多边形),并且GL_REPEAT
在 OpenGL ES 2.0 中映射到它的纹理,以及形成多边形边缘的所有点,是否可以做一些使边缘与背景混合的事情?
我的意思是使边缘更平滑的东西,因此纹理形状不会在边缘和角落周围看起来参差不齐。
好吧,我不确定我是否理解您的尝试,但是您始终可以通过使用 alpha 混合为您的纹理提供一个 alpha 通道来控制多边形的不透明度,从而减少多边形边缘附近的 alpha 值。当然,在这种情况下,纹理与多边形是强耦合的,它不适用于在整个多边形中重复多次的纹理。但在这种情况下,您可以只使用仅包含 Alpha 通道并以不同方式映射到多边形上的第二个纹理(使用不同的纹理坐标)。
另一种选择,当您将多边形细分得更精细时,可能更容易实现,其中包含一些内部顶点和一些边界顶点,它是给每个顶点一个额外的属性,其中包含顶点的 alpha 值。因此,您将内部顶点的 alpha 设为 1(完全不透明),将边界顶点的 alpha 设为 0(完全透明)。然后,您将顶点着色器中的这个值作为varying
变量提供给片段着色器,这样就可以将 alpha(或不透明度)从三角形内部插入到边界,从而获得从不透明到透明的平滑过渡(尽管只是线性的)插值,在您的情况下可能就足够了)。在片段着色器中,您只需将其传递给输出颜色的 alpha 以用于 alpha 混合。
这些只是一般性的想法,假设您知道着色器的工作原理以及如何使用 Alpha 混合。如果此答案不充分,请随时提出更具体的问题。