2015-04-13 3 views
3

Возможно ли запустить программу OpenGL Shader с помощью вершинных и фрагментарных шейдеров в SpriteKit?Vertex Shader in SpriteKit

Кажется, что имеются только фрагменты шейдеров.

SceneKit предлагает его с помощью класса SCNProgram

ответ

0

Согласно Apple, SKShaderdocumentation он говорит, что это:

SKShader объект содержит пользовательский OpenGL ES фрагмента шейдеров. Объекты Shader используются для настройки поведения чертежа многих различных типов узлов в Sprite Kit.

Любое другое учебное место, которое говорит о шейдерах с помощью SpriteKit, всегда относится к ним как к флеш-шейдерам без упоминания вершинных шейдеров.

0

Vertex shader в основном отвечает за проецирование 3D-объектов на 2D-экраны, которые не нужны для spritekit, поскольку это 2D-движок.

Другие применения вершинных шейдеров - масштабирование, преобразование и поворот объектов, все из которых могут быть достигнуты из вашего кода spritekit.

Это может быть причиной не имея их, если они на самом деле не существует :)

1

Собственно вершинные шейдеры полезны для гораздо больше, чем просто преобразования и проекции. Одной из наиболее полезных функций является выполнение вычислений в каждой вершине, а затем аппаратное обеспечение интерполяции результатов, передача их в шейдер фрагмента с помощью «переменных» переменных. (Это значительно эффективнее, чем пытаться вычислить интерполированные значения в самом фрагментаторе.)

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

Библиотека cocos2d поддерживает вершинные шейдеры (и эти методы можно использовать с ним.) Так что это не то, что никто не использует.

В SpriteKit, вероятно, нет возможности использовать вершинные шейдеры. Возможно, вам повезло с помощью объектов SceneKit (которые могут быть легко внедрены в сцену SpriteKit.)

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