我有一个应用程序,它包含数百万个3d rgb点,这些点在绘制时会形成图像。让它们在MFC应用程序中显示的最快方法是什么?我已经尝试过将CDC.SetPixelV与位图结合使用,这似乎很慢,并且正在我的MFC视图类中寻找Direct3D或OpenGL窗口。还有其他好看的地方吗?
双缓冲是您的解决方案。代码项目有很多例子。检查这个,例如
听起来像点云。你可能会在搜索这个词时找到一些好的信息。
3D硬件是获取3D点并将其放入2D显示器的最快方法,因此Direct3D或OpenGL似乎是显而易见的选择。
如果点的数量远大于显示器中的像素数量,那么您可能首先想要剔除视图之外的点。你把所有的点都放在某种空间划分结构中(比如八叉树),并省略任何完全在视锥体之外的节点内的点。这减少了从系统内存推送到GPU内存的数据量,这可能是瓶颈。(如果你的点云是静态的,你只是在构建一个穿越,如果你的GPU有足够的内存,你可以跳过筛选,一次发送所有数据,然后只更新每帧的转换。)
如果你不想使用GPU,而是想编写一个软件渲染器,你会想渲染成一个与显示器像素格式相同的位图(为了消除闪电战在将位图爆破到显示器时需要进行任何像素格式化的可能性)。对于合理的窗口大小,每秒30帧的闪电传输是可行的,但这可能不会给CPU留下太多时间来进行渲染。