0

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

4

2 回答 2

1

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

3D 硬件是获取 3D 点并将它们放入 2D 显示器的最快方式,因此 Direct3D 或 OpenGL 似乎是显而易见的选择。

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

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

于 2012-12-17T22:59:20.440 回答
1

双缓冲是您的解决方案。codeproject上有很多例子。例如检查这个

于 2012-12-17T21:50:23.430 回答