SpriteKit 中的顶点着色器

Posted

技术标签:

【中文标题】SpriteKit 中的顶点着色器【英文标题】:Vertex Shader in SpriteKit 【发布时间】:2015-04-13 03:11:09 【问题描述】:

是否可以在 SpriteKit 中运行带有顶点和片段着色器的 openGL 着色器程序?

似乎只有片段着色器可用。

SceneKit 通过 SCNProgram 类提供它

【问题讨论】:

【参考方案1】:

实际上,顶点着色器不仅仅用于变换和投影。最有用的功能之一是在每个顶点进行计算,然后让硬件对结果进行插值,通过“可变”变量将它们传递给片段着色器。 (这比尝试在片段着色器本身中计算插值要有效得多。)

最简单的例子是 gouraud 着色:您可以在顶点着色器中计算光照,并让硬件对这些值进行插值,以在片段着色器中使用。这比在后者中计算光照效率要高得多。 (然而,这只是一个简单的例子。还有更多有用的例子。例如,许多模糊着色器使用这种技术,因为它更有效。)

cocos2d 库支持顶点着色器(这些技术可以与它一起使用。)所以它不是没有人使用的东西。

目前在 SpriteKit 中可能无法使用顶点着色器。使用 SceneKit 对象(可以无缝嵌入到 SpriteKit 场景中)可能会带来更好的运气。

【讨论】:

【参考方案2】:

根据 Apple 的 SKShader documentation 它是这样说的:

SKShader 对象包含一个自定义 OpenGL ES 片段着色器。着色器对象用于自定义 Sprite Kit 中许多不同类型节点的绘制行为。

任何其他关于 SpriteKit 着色器的教程网站总是将它们称为片段着色器,而没有提及顶点着色器。

【讨论】:

【参考方案3】:

顶点着色器主要负责在 2D 屏幕上投影 3D 对象,Spritekit 不需要它,因为它是一个 2D 引擎。

顶点着色器的其他用途是缩放、变换和旋转对象,这些都可以通过您的 spritekit 代码实现。

如果他们真的不在那里,那可能就是没有他们的原因:)

【讨论】:

以上是关于SpriteKit 中的顶点着色器的主要内容,如果未能解决你的问题,请参考以下文章

着色器存储缓冲区中的 OpenGL 顶点

顶点着色器中的 Phong 光照

opengl着色器程序中的重复顶点

Shader2.0的顶点着色器和片段着色器

此顶点着色器中的统一浮动不起作用

着色器的简单理解