有一个更好的方法吗?
Posted
技术标签:
【中文标题】有一个更好的方法吗?【英文标题】:Is there a better way to do this? 【发布时间】:2010-08-20 05:01:34 【问题描述】:我正在使用 OpenGL 绘制 2D、凹面、有时是多轮廓、有时是自相交的多边形。 这是一个示例:
现在,我选取连接后会产生多边形轮廓的点。然后我把这些放到三角形出来的 GLUTesselator 中。然后我制作纹理坐标并对多边形进行纹理处理。
绝对最慢的组件是曲面细分/三角剖分。鉴于我只需要如您所见绘制这些,有什么比三角测量更快的替代方法?我能找到一种可以适当设置像素的绘画算法吗?
谢谢
【问题讨论】:
我的应用程序是用 c++ 编写的,可能有很多算法也是如此,所以我不想限制我的结果 【参考方案1】:首先是一个更简单的问题:假设您只想使用一种颜色。您可以从轮廓列表开始,然后逐行逐列扫描整个窗口:每当您越过边界时,您将增加或减少(取决于交叉的感觉)计数器how_many_outlines_am_I_inside
。当它为零时,将像素涂成白色,否则将其涂成绿色(我猜边界本身为黑色)。这将正确处理自相交曲线。
现在是阴影。从您的示例来看,阴影垂直均匀,但水平变化,缩放到轮廓的整个宽度。因此,您需要一个轮廓堆栈(我推荐 stl::list),而不是一个简单的计数器,这样您就可以跟踪哪个轮廓(您在里面的那些)是最上面的,以便您可以计算你从 xmin 到 xmax 的距离是多少。最后是半透明(就像通过矩形部分可见的星星):您必须自己决定规则,我无法通过眼球推断它们,但堆栈应该易于实现。
需要 C++ 代码方面的帮助吗?
【讨论】:
好吧,我做了更多搜索,发现有一种涉及模板缓冲区的技术。我会试试这个,如果不是我要找的,我会回复你的:) 我认为他一次绘制一个多边形 -- 我认为不需要堆栈。 @Tom Sirgedas:我的方法涉及一次为一个像素着色,因此它需要一个堆栈。想一想,可以尝试一些有趣的优化技巧...以上是关于有一个更好的方法吗?的主要内容,如果未能解决你的问题,请参考以下文章