这似乎是一个相当被问到的问题-(先听我说!:)
我创建了一个带有perlin噪点的多边形,它看起来像这样:
我需要从这一系列点生成纹理。(我使用的是Monogame / XNA,但我认为这个问题有些不可知。)
无论如何,研究这个问题告诉我,许多人使用光线投射来确定一条线穿过多边形形状的次数(如果一次,则在内部,两次或零次,在外部)。这是有道理的,但是我想知道是否有更好的方法,因为我已经掌握了所有要点。对我要填充的每个像素进行小的射线投射似乎是多余的-这是唯一/最佳方法吗?
如果我有一个小的500px正方形图像需要填写,则需要对250,000个单独像素进行光线投射,这看起来非常糟糕。
如果要对每个像素执行此操作,则可以使用扫掠线:
从最上方的坐标开始,然后从左到右检查水平射线。计算与多边形的所有交点,并按其x坐标对其进行排序。然后迭代该行上的所有像素,并记住您是进还是出。每当遇到交叉路口时,请切换到另一侧。如果有像素,请设置纹理。如果没有,请忽略它。对于每个可能的水平线,从上到下执行此操作。
相交的计算可以通过几种方式来增强。例如,通过使用诸如网格,四叉树等的加速度数据结构,或通过检查多边形之前的相交或接触边缘。然后,当您扫描线时,您将已经知道哪些边缘会导致相交。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句