c++ - 如何用奇偶规则填充多边形?

标签 c++ algorithm opengl directx game-engine

我有 n 个多边形。每个多边形都有 n 个点,以及一些其他属性,如边界框等。我可以用某种颜色分别填充它们,但我想用奇偶规则填充多边形。 like this这有哪些算法? (可能基于 vector 或基于光栅)

最佳答案

如果栅格适合您,请计算边与线的所有交叉点(每条线的交叉点列表)。在光栅线之间放置水平线,所以[对于正方形]上面的线没有边缘交叉点,下面的线有两个交叉点。

现在每个交叉点从左到右遍历每一行,从“外部”开始,然后反转当前状态的每个交叉点。

(顺便说一句,您可能会断言您也在“外部”结束......当然我说的是无限 x-res,您可能会进一步将其限制为某个固定分辨率,但计算从任何地方开始是第一个路口,我会跑到最后一个路口,只是为了那个断言检查)

正确获得几乎水平的线和两个边缘之间的连接可能很棘手(想象星形的尖锐末端,在相同的光栅像素处上下移动,只有 0.1 像素的 x 坐标差异等) .

我可能会在纸上画一些图,如果简单的数学就可以了,或者需要一些极端情况的逻辑,然后进行大量的单元测试。


如果你想要完整的 vector ,它基本上是一样的,只是它不是每条线,而是每条边的每一端 y 坐标(创建虚拟线)来计算与其他边的所有交点。

实际上,这可能更容易编写,但将结果应用到光栅图像上可能会更难。恕我直言(远非“确定”,我已经很久没有这样做了)。

关于c++ - 如何用奇偶规则填充多边形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38569250/

相关文章:

algorithm - 嵌套循环复杂度

Opengl - glDrawBuffers 修改是否存储在 FBO 中?不?

c++ - 将私有(private)指针数组初始化为 null

c++ - 在 C++ 运算符 << 重载中使用友元函数访问私有(private)成员时遇到问题

c++ - 无法将空函数指针作为模板参数传递

python - 在 PyOpenGL 中切换 Y 轴和 Z 轴

opengl - glVertexPointer 的用途是什么?

c++ - 从 std::cin 读取密码

java - 在 n 个二维数组中搜索

algorithm - 跨多个序列的最长公共(public)子串