在 libgdx 中对弯曲凹形进行颜色填充的方法有哪些?
让我们假设:
1) 要渲染的形状是由彼此靠近的顶点数组构建的。
2) 顶点之间的边已知。
3) 顶点的位置可能会随着时间的推移而动态变化。我们保证不会发生自相交(并且形状不会是空心的)。
最右边的图片是我试图在 libgdx 中渲染的图片(有或没有轮廓)。
根据我的阅读,三角测量是非弯曲形状的一种流行方法,但为了让它看起来对具有曲率的形状有任何好处,我想我们需要大量的顶点(以便许多线“缩小”类似于一条平滑的曲线)。
最佳答案
三角测量并不是唯一的方法。我不熟悉你的 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)
是你的凹边界,你应该用它来分割你的形状填充折线
您可以使用与三角形或凸多边形相同的方法,请参阅:
渲染折线轮廓
粗略地说,如果您没有快速的像素访问或可用的水平线渲染,这不是一个好方法。有一个简单但不那么快的选择:
渲染轮廓
内部洪水填充
此步骤很慢,可能会导致较大分辨率出现问题。
关于java - 在 libgdx 中填充 2D 弯曲凹形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49110573/