Здесь есть две основные части: получение данных SceneKit в ModelIO и рендеринг данных ModelIO с помощью Metal.
Чтобы получить SceneKit сцены в ModelIO, первый использование SceneKit API (SCNScene
или SCNSceneSource
для загрузки файла .scn
, а затем использовать ModelIO API, чтобы получить объекты, которые вы хотите, как сетки. Вы можете создать MDLAsset
от всей сцены используя assetWithSCNScene:bufferAllocator:
, а затем пройти через иерархию объекта актива в ModelIO найти сетку вы хотите, или ходить по иерархии узлов в SceneKit найти SCNNode
или SCNGeometry
вы хотите, и затем получить сетку с ModelIO помощью objectWithSCNNode:bufferAllocator:
или meshWithSCNGeometry:bufferAllocator:
.
Что касается использования моделей ModelIO в приложении Metal, у Apple есть sample code project, который показывает, как использовать ModelIO для загрузки OBJ-сетки, используйте MetalKit, чтобы получить данные в ячейке в буферах Metal GPU и подключите информацию о материалах, которую вы получаете от ModelIO, к шейдеру переменные для использования в вашем собственном рендерере.
Вы должны быть в состоянии поставить два из них вместе: где образец кода загружает OBJ, чтобы получить MDLAsset
или MDLMesh
, использовать методы (1), чтобы получить актив или сетку из SceneKit вместо этого.
Модель материала SceneKit, конечно же, намного сложнее, чем простой фондовый шейдер, используемый в примере кода. Но пример кода показывает, как перебирать свойства MDLMaterial
и задавать соответствующие аргументы в металлическом шейдере - если вы создаете более сложный шейдер, просто выполните те же шаги, чтобы сопоставить свойства материала с любыми входами вашего шейдера.
Ах, ха! Итак - в двух словах - я даю геометрию и имена материалов в моделире: «мой ящик», «классный материал», а затем извлекают геометрию/материал во время обхода - с помощью методов обхода SceneKit или ModelIO. Ключ должен обозначать вещи. У меня есть это право? – dugla
Вы можете перебирать материалы независимо от их маркировки, но метки, безусловно, могут помочь вам отслеживать. – rickster
Подождите, что? Как определить элемент в сцене без метки. Две текстурированные сферы подразумевают четыре (4) метки (при условии отличных описаний материалов) нет? – dugla