"反相"凹多边形

时间:2015-11-01 19:49:02

标签: graphics 2d trigonometry vector-graphics

我正在构建一个2D游戏,其中玩家只能看到未被其他物体阻挡的东西。考虑一下它现在的样子:

我为此实现了光线跟踪算法,它似乎工作正常(我已经减少了演示的边界,使所有边缘都可见)。

Ray tracing example

正如你所看到的,较亮的区域是由一堆三角形构成的,每个三角形都有一个共同点在玩家的位置。每两个邻居都有两个共同点。

然而我愿意计算外部的边界,用多边形的部分填充黑色三角形"隐藏"什么玩家看不到。

这样做的一种方法是"掩盖"带有当前多边形的黑色矩形,但我担心它效率很低。

有关实现此目的的有效算法的任何想法?

谢谢!

1 个答案:

答案 0 :(得分:1)

非分析性的粗略解决方案。

  • 逐渐增加极角的投射光线
  • 记录光线首次撞击物体时(及其撞击点)
  • 继续前进,直到它不再击中同一个物体(并记录它先前撞击的位置)
  • 使用两个记录点,构建一个延伸到无穷大(或任何地方)
  • 的梯形

enter image description here

注意事项:

  • 对于凹陷不能很好地工作 - 需要包括中间的所有点。可能需要Delaunay三角测量等......凌乱! enter image description here

  • 可能需要额外的状态来说明隐藏在彼此背后的物品。

enter image description here