【发布时间】:2014-12-21 03:20:00
【问题描述】:
任务
对多边形执行许多命中测试。我有大约 10,000 个多边形,每个多边形有 1,000 个点。将对这些多边形执行大约 100,000,000 次命中测试。多边形可以相互接触,但从不重叠。
解决方案
对每个命中测试进行简单的多边形点测试。
问题
太慢了。
改进
栅格化多边形并检查命中测试的像素属于哪个多边形。
新问题
多边形的光栅化很慢。我正在使用这个算法:http://alienryderflex.com/polygon_fill/
想法
在 GPU 上栅格化多边形,因为它已针对此任务进行了优化,并且可以在硬件中执行。
问题
你对我的想法有什么看法,你能给我建议从哪里开始吗?它会带来高性能吗?
旁注
该区域很少被多边形覆盖。我想维护一个像素列表而不是位图。
【问题讨论】:
-
您是否尝试过使用标准图形库(GDI、Direct** for Windows、OpenGL 等)进行光栅化?
-
这些库总是直接在屏幕上绘制。我不想画画。我想执行命中测试。
-
不,它们可以绘制到内存上下文(在 MemDC 中选择位图)。如果多边形坐标在合理的范围内,这是解决像您这样的问题的有效方法
-
如何获得多边形命中的像素?我必须通过整个位图吗?那不是效率低下吗(将薄马蹄形想象成多边形)?
-
你为什么想要被多边形击中的像素?您可以在进行命中测试的任何位置对位图进行索引,然后只获得 1 个像素来显示它是否命中。
标签: performance algorithm gpu polygon raster