在libgdx中用彩色填充弧形凹形的方法有哪些?
让我们假设:
1)要渲染的形状是由相互靠近的一组顶点构成的。
2)顶点之间的边是已知的。
3)顶点的位置可能会随着时间动态变化。我们保证不会发生自相交(并且形状不会是空心的)。
最右边的图片是我要在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
渲染折线轮廓
如果您无法快速访问像素或无法进行水平线条渲染,那么这不是一个好方法。有一个简单但不那么快的选择:
渲染轮廓
里面充水
此步骤很慢,可能会导致更大的分辨率问题。