我有一个Windows应用程序,目前主要使用MFC呈现图形,为了更好地利用GPU,我想对其进行修改。大多数图形都是简单明了的,可以很容易地构建成场景图,但是有些图形可能非常困难。具体来说,除了普通的网格类型对象之外,我还处理点云,这些云可能包含数十亿笛卡尔,存储方式非常紧凑,使用了大量定制的裁剪技术来实时显示(示例)。我要找的是一种机制,它可以将大部分场景呈现给缓冲区,然后让我访问该缓冲区、z缓冲区和摄像机参数,这样我就可以在将它们放到显示器前修改它们。我想知道在Direct3D、OpenGL或可能使用更高级别的框架(如OpenSceneGraph )时,这是可能的,最好的起点是什么?考虑到该软件是基于Windows的,我可能更喜欢使用Direct3D,因为这可能导致驱动程序问题最少,这是我渴望避免的。OpenSceneGraph似乎通过八叉树提供自定义筛选,这些树非常接近,但与我所使用的不完全相同。
编辑:要澄清一点,目前我有以下几点;
慢位是第1节中突出显示的部分,我想用GPU渲染来代替它。我设想的解决方案是为GPU构建一个场景,根据我当前的相机参数将其呈现给位图(带有匹配的z-缓冲区),然后在输出之前添加我的点云。
或者,我可以移动到一个基于场景的框架,为我管理相机和导航,并在呈现循环中根据体积和细节级别提供视点作为球体或碎屑。在这个场景中,我还需要能够向视图中添加游标信息。
在任何一种情况下,宿主应用程序都将是基于C++的MFC VS2017,这将需要太多的工作来进行本练习所需的更改。
发布于 2019-01-31 20:59:01
很难准确地根据你对一个复杂问题的描述来说。
OSG可能会做你想要的。
根据您的时间框架,我会考虑避免使用OpenGL (OSG)和DirectX来支持更新的Vulkan 3D API。它是D3D和OGL的继承者,是由GPU制造商自己设计的,以提供超过其前身的最佳性能。
OSG项目目前正在开发一个名为VSG的Vulkan扫描图,它已经显示了比OSG优越的性能,并将具有更广泛的剔除能力。
我和点云一起工作过,并且对它们很有经验,但我不太清楚你打算做什么。
如果你真的想就此事进行口头讨论,我很容易找到(我的公司是AlphaPixel - AlphaPixel.com),你可以打电话给我们。我现在在欧洲时区,从你的问题上还不清楚你在哪里,但你听起来是美国的。
https://stackoverflow.com/questions/54446515
复制相似问题