Есть ли какой-нибудь инструмент / программное обеспечение, которое позволяет мне взять всю сцену из запущенного приложения и выгрузить ее в файл, который можно преобразовать в какой-нибудь популярный формат 3d, такой как OBJ?
Да и нет. Вполне возможно перехватить данные, отправленные в OpenGL или Direct3D. Проблема в том, что ни OpenGL, ни Direct3D не являются графами сцен. Они рисуют API-интерфейсы, так что в итоге вы получите набор команд для рисования.
И эти сгустки не обязательно относятся к объекту или целым объектам. Например, рисование персонажа в современных играх происходит за несколько проходов и кусков (для лицевой анимации требуются гораздо более сложные шейдеры, чем для остальной части тела).
Технически можно предположить, что массивы вершин или объекты буфера вершин содержат хотя бы целые объекты, поэтому дамп объектов на основе вызовов glDrawElements или glDrawArrays и использованных указателей массива вершин или смещений VBO является разумным.
Немедленный режим - это показательный шаг: у вас нет ни малейшего кусочка информации о том, что отображается, когда. Технически вы можете попробовать некоторую эвристику, используя время и порядок звонков. Но это бесполезно.
Существует ли какой-либо инструмент / программное обеспечение, которое позволяет мне извлечь всю сцену из запущенного приложения и выгрузить ее в файл, который можно преобразовать в какой-нибудь популярный формат 3d, такой как OBJ?
В моем локальном хакерском пространстве для этой задачи был написан очень элементарный перехватчик OpenGL. И мы столкнулись со всеми упомянутыми мною проблемами.