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

C++ 如何用奇偶规则填充多边形?,c++,algorithm,opengl,directx,game-engine,C++,Algorithm,Opengl,Directx,Game Engine,我有n个多边形。每个多边形有n个点,以及一些其他属性,如边界框等。我可以用某种颜色分别填充它们,但我想用奇偶规则填充多边形。这有哪些算法?(可以是基于矢量的或基于光栅的)如果光栅适合您,请计算边与线的所有交叉点(每条线的交叉点列表)。将水平线放在光栅线之间,使上面的[正方形]线没有边交点,下面的线有两个交点 现在,在每个交叉点从左到右的每一条直线上,从“外部”开始,每个交叉点反转当前状态 (顺便说一句,你也可以断言你结束于“外部”…当然我说的是无限x-res,你可以进一步将它限制在某个固定分辨率

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

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

现在,在每个交叉点从左到右的每一条直线上,从“外部”开始,每个交叉点反转当前状态

(顺便说一句,你也可以断言你结束于“外部”…当然我说的是无限x-res,你可以进一步将它限制在某个固定分辨率,但计算从第一个交点开始,我会一直运行到最后一个交点,只是为了进行断言检查)

要正确地获得几乎水平的线以及两条边之间的连接可能很困难(想象恒星的尖端,在同一个光栅像素上下移动,只有0.1px x-coord diff,等等)

我可能会在纸上画一些图,如果干净的数学就可以了,或者需要一些特殊的逻辑,那么单元测试就很重要了


如果需要完整向量,它基本上是相同的,只是不是每行,而是每边y坐标的每一端(创建虚拟线),以计算与其他边的所有交点


实际上,这可能更容易编写,但在光栅图像上应用结果可能更难。IMHO(远没有感觉“确定”,我已经很久没有这样做了)。

使用模具翻转应该是最有效的基于光栅的方法。执行一次操作填充模具缓冲区(例如,
glStencilOp(GL_KEEP,GL_KEEP,GL_INVERT)
),第二次操作使用全屏四元菜单,根据模具缓冲区的值设置颜色(例如,
glStencilFunc(GL_EQUAL,1,1)

是否可以自己编程?如果
SomePixel
属于多边形的
奇数
偶数
则答案与此处的答案基本相同:。尽管该解决方案适用于单个多边形,但相同的解决方案适用于多个多边形。