Сброс данных трехмерной геометрии работающего приложения Direct3D или OpenGL - PullRequest
7 голосов
/ 04 января 2012

Для моего хобби-проекта с использованием 3D-принтера я бы хотел запечатлеть 3d-модели из различных компьютерных игр.Игры работают на Windows и обычно используют DirectX9, но есть и такая, которую можно настроить на использование OpenGL.

Существует ли какой-либо инструмент / программное обеспечение, которое позволяет мне извлечь всю сцену из запущенного приложения и выгрузить ее в файл, который можно преобразовать в какой-нибудь популярный формат 3d, например OBJ?

Мне нужна только геометрия;точки, ребра, многоугольники.Мне не нужны текстуры или данные шейдеров.Возможно ли это вообще?

Ответы [ 3 ]

4 голосов
/ 04 января 2012

Есть ли какой-нибудь инструмент / программное обеспечение, которое позволяет мне взять всю сцену из запущенного приложения и выгрузить ее в файл, который можно преобразовать в какой-нибудь популярный формат 3d, такой как OBJ?

Да и нет. Вполне возможно перехватить данные, отправленные в OpenGL или Direct3D. Проблема в том, что ни OpenGL, ни Direct3D не являются графами сцен. Они рисуют API-интерфейсы, так что в итоге вы получите набор команд для рисования.

И эти сгустки не обязательно относятся к объекту или целым объектам. Например, рисование персонажа в современных играх происходит за несколько проходов и кусков (для лицевой анимации требуются гораздо более сложные шейдеры, чем для остальной части тела).

Технически можно предположить, что массивы вершин или объекты буфера вершин содержат хотя бы целые объекты, поэтому дамп объектов на основе вызовов glDrawElements или glDrawArrays и использованных указателей массива вершин или смещений VBO является разумным.

Немедленный режим - это показательный шаг: у вас нет ни малейшего кусочка информации о том, что отображается, когда. Технически вы можете попробовать некоторую эвристику, используя время и порядок звонков. Но это бесполезно.

Существует ли какой-либо инструмент / программное обеспечение, которое позволяет мне извлечь всю сцену из запущенного приложения и выгрузить ее в файл, который можно преобразовать в какой-нибудь популярный формат 3d, такой как OBJ?

В моем локальном хакерском пространстве для этой задачи был написан очень элементарный перехватчик OpenGL. И мы столкнулись со всеми упомянутыми мною проблемами.

1 голос
/ 10 июля 2012

Direct3D 9 API Interceptor Захватывает текстуры и вершины.И обрабатывает шейдеры.

1 голос
/ 04 января 2012
...