在libgdx中填充2D弯曲凹面形状

时间:2018-03-05 12:30:37

标签: java graphics libgdx

在libgdx中对弯曲凹面形状进行颜色填充的方法有哪些?

让我们假设:

1)要渲染的形状是由一组彼此靠近的顶点构建的。

2)顶点之间的边缘是已知的。

3)顶点的位置可能会随着时间的推移而动态变化。我们保证不会发生自我交叉(并且形状不会是空心的)。

enter image description here

最正确的图片是我在libgdx中渲染的内容(带或不带轮廓)。

从我读过的文章来看,三角测量是一种非弯曲形状的流行方法,但是为了使它看起来对于有曲率的形状有任何好处,我想我们需要大量的顶点(这样很多行“缩小”类似于平滑的曲线。)

1 个答案:

答案 0 :(得分:1)

Triangulatin并不是唯一可以解决这个问题的方法。我不熟悉你的gfx lib,但我会在低级别做这个:

  1. 将折线细分为凸面

    您需要知道哪个线段是线,哪个线是曲线,对于曲线,您还需要知道相邻贴片的控制点,以便连接平滑。凹角边界可以通过角度变化交换符号来检测,因此如果你得到具有一致宽度规则的后续点p(0)...p(n)那么

    d(i  ) = p(i+1)-p(i  )
    d(i-1) = p(i  )-p(i-1)
    n(i) = cross( d(i) , d(i-1) )
    n(i).z * n(i-1).z < 0.0
    

    所以十字产品会给你正常,如果正常交换的方向意味着绕组改变了...等式假设点位于xy平面或平行于它。如果不是这样的话,最后一行应该是

    dot( n(i) , n(i-1) ) < 0.0
    

    如果真的p(i)是你的凹边界,你应该用它来分割你的形状

  2. 填充折线

    您可以使用与三角形或凸多边形相同的方法,参见:

  3. 渲染折线轮廓

  4. 如果您没有快速像素访问或水平线渲染可用,这是不好的方法。有一个简单但不那么快的选择:

    1. 呈现大纲

    2. 洪水填充

      此步骤很慢,可能会导致更大分辨率的问题。