是否有任何工具/软件允许我从正在运行的应用程序中抓取整个场景并将其转储到可以转换为一些流行的 3D 格式(如 OBJ)的文件中?
是的,也不是。完全有可能拦截发送到 OpenGL 或 Direct3D 的数据。问题是,OpenGL 和 Direct3D 都不是场景图。他们正在绘制 API,所以最终得到的是一堆绘图命令。
这些束不一定是每个对象或整个对象。例如,在现代游戏中绘制角色需要多次通过和分块(面部动画需要比身体其他部分更复杂的着色器)。
从技术上讲,您可以假设顶点数组或顶点缓冲区对象至少包含整个对象,因此基于 glDrawElements 或 glDrawArrays 调用以及使用的顶点数组指针或 VBO 偏移量转储对象是合理的。
不过,即时模式是一个令人震惊的问题:您没有任何关于何时渲染什么的信息。从技术上讲,您可以使用调用的时间和顺序尝试一些启发式方法。但这是徒劳的。
是否有任何工具/软件允许我从正在运行的应用程序中抓取整个场景并将其转储到可以转换为一些流行的 3D 格式(如 OBJ)的文件中?
在我当地的黑客空间,专门为该任务编写了一个非常基本的 OpenGL 拦截器。我们遇到了我提到的所有问题。