在libgdx中用彩色填充弧形凹形的方法有哪些?

让我们假设:

1)要渲染的形状是由相互靠近的一组顶点构成的。

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

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

java - 在libgdx中填充2D弯曲凹形-LMLPHP

最右边的图片是我要在libgdx中渲染的图片(有或没有轮廓)。

根据我的阅读,三角剖分是非曲线形状的一种流行方法,但是为了使它看起来对具有曲率的形状都有好处,我想我们将需要大量的顶点(因此,许多线会“缩小” ”(类似于平滑曲线)。

最佳答案

Triangulatin并不是解决此问题的唯一方法。我不熟悉您的gfx库,但我会在低级进行此操作:


将折线细分为一组凸线

您需要知道哪个线段是直线,哪个线段是曲线,对于曲线,您还需要知道相邻面片的控制点,以便连接平滑。凹边界可以通过角度变化交换符号这一事实来检测,因此,如果得到的点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


如果true p(i)是您的凹边界,则应通过它拆分形状
填充折线

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


how to rasterize rotated rectangle
Algorithm to fill triangle

渲染折线轮廓


如果您无法快速访问像素或无法进行水平线条渲染,那么这不是一个好方法。有一个简单但不那么快的选择:


渲染轮廓
里面充水

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

07-24 20:59