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

标签 java graphics libgdx

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

让我们假设:

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

2) 顶点之间的边已知。

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

enter image description here

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

根据我的阅读,三角测量是非弯曲形状的一种流行方法,但为了让它看起来对具有曲率的形状有任何好处,我想我们需要大量的顶点(以便许多线“缩小”类似于一条平滑的曲线)。

最佳答案

三角测量并不是唯一的方法。我不熟悉你的 gfx 库,但我会在低级别上执行此操作:

  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
    

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

  2. 填充折线

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

  3. 渲染折线轮廓

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

  1. 渲染轮廓

  2. 内部洪水填充

    此步骤很慢,可能会导致较大分辨率出现问题。

关于java - 在 libgdx 中填充 2D 弯曲凹形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49110573/

相关文章:

java - 在游戏暂停之前复制当前屏幕的图片,将其模糊并在游戏暂停期间渲染到屏幕

Java,文本中的n个单词数

java - hadoop 当前租户正在尝试重新创建文件

java - 如何通过镜头让玩家被摧毁?

java - 使用 libgdx 通过 Eclipse 导出可运行的 .jar 文件

java - 用 Java Applet 制作一条蛇

java - 获取和设置键值属性

java - 如何在 JDateChooser 中设置 JCalendar 日期

java - Android 绘制 2D 图形

iphonecamerOverlay 用于替代现实应用程序