有一个更好的方法吗?

时间:2010-08-20 05:01:35

标签: c++ c algorithm graphics vector

我正在使用OpenGL绘制2D,凹面,有时多面,有时是自相交的多边形。 这是一个示例: alt text

现在,我选择连接的点会导致多边形的轮廓。然后我将它们放入GLUTesselator中,三角形出来了。然后我制作纹理坐标和纹理多边形。

绝对最慢的组件是曲面细分/三角测量。鉴于我只需要如你所知绘制这些,有什么更快的三角测量替代方案?我可以找到一个能够适当设置像素的绘画算法吗?

由于

1 个答案:

答案 0 :(得分:1)

首先是一个更简单的问题:假设您只想使用一种颜色。您可以从轮廓列表开始,然后按行和列扫描整个窗口:每当您越过边界时,您将增加或减少(取决于交叉的感觉)计数器how_many_outlines_am_I_inside。当它为零时,将像素绘制为白色,否则将其绘制为绿色(我猜测边界本身为黑色)。这将正确处理自相交曲线。

现在为阴影。根据您的示例判断,阴影垂直均匀,但水平变化,缩放到轮廓的整个宽度。因此,不需要一个简单的计数器,你需要一个堆栈(我推荐stl :: list)的轮廓,这样你就可以跟踪哪个轮廓(你所在的轮廓)是最上面的,这样你就可以计算出来了。从x min 到x max 所覆盖的距离的几分之一。最后是半透明(就像通过矩形部分可见的星星一样):你必须自己决定规则,我不能通过眼球来推断它们,但是堆栈应该易于实现。

想要一些C ++代码的帮助吗?