转储正在运行的Direct3D或OpenGL应用程序的3d几何数据

Cod*_*ice 7 opengl directx 3d direct3d export

对于涉及3D打印机的我的业余爱好项目,我想从各种计算机游戏中捕获3D模型.游戏在Windows上运行,通常使用DirectX9,但也有一个可以配置为使用OpenGL.

是否有任何工具/软件允许我从正在运行的应用程序中获取整个场景并将其转储到可以转换为某种流行的3D格式(如OBJ)的文件中?

我需要的只是几何学; 点,边,多边形.我不需要纹理或着色器数据.这有可能吗?

dat*_*olf 4

是否有任何工具/软件允许我从正在运行的应用程序中抓取整个场景并将其转储到可以转换为一些流行的 3D 格式(如 OBJ)的文件中?

是的,也不是。完全有可能拦截发送到 OpenGL 或 Direct3D 的数据。问题是,OpenGL 和 Direct3D 都不是场景图。他们正在绘制 API,所以最终得到的是一堆绘图命令。

这些束不一定是每个对象或整个对象。例如,在现代游戏中绘制角色需要多次通过和分块(面部动画需要比身体其他部分更复杂的着色器)。

从技术上讲,您可以假设顶点数组或顶点缓冲区对象至少包含整个对象,因此基于 glDrawElements 或 glDrawArrays 调用以及使用的顶点数组指针或 VBO 偏移量转储对象是合理的。

不过,即时模式是一个令人震惊的问题:您没有任何关于何时渲染什么的信息。从技术上讲,您可以使用调用的时间和顺序尝试一些启发式方法。但这是徒劳的。

是否有任何工具/软件允许我从正在运行的应用程序中抓取整个场景并将其转储到可以转换为一些流行的 3D 格式(如 OBJ)的文件中?

在我当地的黑客空间,专门为该任务编写了一个非常基本的 OpenGL 拦截器。我们遇到了我提到的所有问题。