我目前正在学习 libGDX,并用网格做一些事情。我需要给视频卡一些三角形来渲染。
我现在的任务就是这样。在某个“盒子”的某些点上有几个矩形(每个矩形都有原点、宽度和高度),将矩形的外部分成矩形本身。有了这些小矩形后,我可以将它们分成三角形并轻松渲染。像这样。
有蓝色矩形信息。我需要有这样的东西。在用橙色勾勒出这些矩形后,我可以将它们分成三角形并轻松渲染。
我的做法是这样的。从每个矩形的顶部和底部“绘制”水平线,直到到达盒子的壁或其他矩形的壁。这样做,该字段将像这样以矩形分隔
这基本上就是我所需要的。
目前无法想象程序化方法。任何帮助将不胜感激。谢谢。
我将用 Java 实现它。
最佳答案
您绘制的内容分为两个步骤。
第 1 步通常称为“梯形分解”,您可以通过 google 搜索大量深入信息。要进行梯形分解:
- 找到所有存在顶点或交点的 y 坐标,并对它们进行排序。
- 然后,每对相邻 y 坐标之间的每个水平 strip 必须由 strip 边缘上有顶部和底部的梯形组成,因为 strip 内不能有角或交叉点。找到跨越 strip 的每个多边形或边的部分,以创建梯形分解。
梯形的水平 strip 很容易转换成三角形 strip ,只需在每个梯形的对角添加切割边即可,但要获得您绘制的内容,您需要第二步。
在第 2 步中,您将遍历成对的相邻 strip ,并在可能的情况下组合它们的梯形。这会将每个矩形的所有部分重新合并在一起,并去除大矩形两侧的细条,留下您绘制的条分解。
关于algorithm - 需要起点来实现当前算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51565060/