在MFC C ++应用程序中在屏幕上绘制点的最快方法

时间:2012-12-17 18:50:59

标签: c++ performance graphics mfc

我的应用程序包含数百万个3d rgb点,这些点在绘制时会形成图像。让他们在MFC应用程序中进行筛选的最快方法是什么?我已经尝试将CDC.SetPixelV与位图结合使用,这似乎很慢,我正在寻找MFC视图类中的Direct3D或OpenGL窗口。还有其他好看的地方吗?

2 个答案:

答案 0 :(得分:1)

双缓冲是您的解决方案。 codeproject上有很多例子。例如,请检查this one

答案 1 :(得分:1)

听起来像点云。您可能会在该术语中找到一些很好的信息。

3D硬件是获取3D点并将其转换为2D显示的最快方式,因此Direct3D或OpenGL看起来都是明显的选择。

如果点的数量远远大于显示器中的像素数,那么您可能首先想要剔除视图之外的点。您将所有点放在某种空间分区结构(如八叉树)中,并省略完全在观察截头外的任何节点内的点。这减少了从系统内存推送到GPU内存的数据量,这可能是瓶颈。 (如果您的点云是静态的,并且您只是构建了一个飞越,并且如果您的GPU有足够的内存,您可以跳过剔除,立即发送所有数据,然后只更新每个帧的变换。)

如果您不想使用GPU而是编写软件渲染器,则需要渲染到与显示器具有相同像素格式的位图(以消除blit需要执行任何操作的机会)像素格式化,因为它将位图爆炸到显示器)。对于合理的窗口大小,以每秒30帧的速度进行blitting是可行的,但CPU可能不会留出太多时间进行渲染。