2014-12-09 2 views
1

Есть ли жизнеспособный способ использования текстур с шейдерами SCNProgram в Scenekit? Насколько я могу судить, нет способа получить доступ к текстурам SCNMaterial по умолчанию из SCNProgram (я знаю, что могу получить к ним доступ из модификаторов шейдеров, но, к сожалению, насколько я могу судить, я не могу сделать то, что мне нужно сделать с модификаторами шейдеров).Использование текстур с пользовательскими SCNPrograms в SceneKit

Управление собственными текстурами непросто, потому что очевидное место для их привязки - в блоке material.handleBindingOfSymbol - вызывается один раз для каждого бита геометрии, созданного с помощью материала. В моем случае это десятки тысяч раз за кадр, что кажется сумасшедшим для чего-то, что нужно сделать только один раз, если граф сцены правильно сортирует состояние рендеринга.

Я предположил, что будет способ прикрепления текстуры к SCNProgram или к материалу SCNM, чтобы scengraph мог управлять состоянием рендеринга, но для жизни меня я не могу найти ничего подобного.

Я что-то упустил или текстуры в основном непригодны для использования с программами SCN?

+0

Что вы не можете сделать в комплекте модификаторов шейдеров? –

+0

Привет, Дэвид, спасибо за ваш ответ. Я обрабатываю светящуюся геометрию - в отличие от обычного «прозрачного» затенения, это должно действовать как свет и быть добавочно смешанным (согласно моему предыдущему вопросу, на который вы ответили). Единственный способ, которым я нашел, чтобы заставить stageKit собрать его правильно, - это настраиваемый шейдер, который просто выполняет поиск текстуры и возвращает цвет с альфа = 0. Модификаторы, похоже, предполагают нормальное освещение и имеют фазу освещения, и я не могу решить, можно ли просто обойти, чтобы просто вернуть «неосвещенный» цвет. – jportway

+0

Также, как я упоминал в [моем предыдущем вопросе] (http://stackoverflow.com/questions/27319549/using-blending-functions-in-scenekit?noredirect1_comment43102388_27319549), я не могу получить SceneKit для включения смешивания без установки свойства «opaque = false» в SCNProgram - никакое количество попыток перебора с «прозрачностью», похоже, не имеет никакого значения, странно. Поэтому я не уверен, как заставить смешение без SCNProgram. – jportway

ответ

1

Невозможно получить доступ к текстурам материала, как только будет настроена пользовательская SCNProgram. SCNProgram полностью заменяет рендеринг SceneKit, чтобы вы могли делать raw OpenGL | ES. Поэтому вам действительно нужно создавать и связывать текстуру с помощью GL.

+0

Я понимаю, что SCNPRogram полностью заменяет рендеринг SceneKit - я не понимаю, почему набор сцен еще не может управлять ресурсами текстуры, так как это почти невозможно сделать удовлетворительно (особенно, если вы делаете такие вещи, как рендеринг сцены в несколько контекстов и т. Д. .). Хог. – jportway

+0

Этот ответ включает в себя как передать текстуры в вашу SCNProgram: https://stackoverflow.com/a/37738386/211098 – Morty

Смежные вопросы