繁体   English   中英

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

[英]Dumping 3d geometry data of a running Direct3D or OpenGL application

对于涉及3d打印机的我的业余项目,我想从各种计算机游戏中捕获3d模型。 这些游戏在Windows上运行,通常使用DirectX9,但也可以将其配置为使用OpenGL。

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

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

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

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

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

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

即时模式不过是一道亮点:您没有丝毫的信息,什么时候呈现的信息。 从技术上讲,您可以使用呼叫的时间和顺序尝试一些启发式方法。 但这是徒劳的。

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

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

Direct3D 9 API拦截器它捕获纹理和顶点。 并处理着色器。

glintercept和/或apitrace

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM