答案 0 :(得分:1)
使用模板翻转应该是最有效的基于栅格的方法来执行此操作。是否通过填充模板缓冲区(例如glStencilOp(GL_KEEP, GL_KEEP,GL_INVERT)
)和第二遍使用全屏四边形,根据模板缓冲区的值设置颜色(例如glStencilFunc(GL_EQUAL, 1 ,1)
)
答案 1 :(得分:0)
如果光栅对您没问题,请计算边缘与线条的所有交叉点(每条线的交叉点列表)。在栅格线之间放置水平线,因此上面的[square]线没有边缘交点,下面的线有两个交叉点。
现在每个交叉路口从左到右依次走,你开始"在"之外,每个交叉点都会反转当前状态。
(顺便说一下,你可以断定你结束了#34;外面"以及......当然我在谈论无限的x-res,你可以进一步将它限制在一些固定的分辨率,但计算从第一个交叉点开始,我会一直运行到最后一个,只是为了断言检查)
正确地获得几乎水平的线条以及两条边缘之间的连接可能很棘手(想象明星的尖端,在同一光栅像素上向下和向上,仅有0.1px x-coord diff等)
我可能会在纸上画一些图片,如果干净的数学会做,或者需要一些角落逻辑逻辑,那么就要大量测试。
如果你想要全矢量,它基本上是相同的,只是它不是每条线,而是每条边的y-coord(创建虚线)来计算与其他边缘的所有交点。
实际上这可能更容易编写,但是在光栅图像上应用结果可能会更加困难。恕我直言(远非感觉"肯定",自从我这么做以来已经很久了。)