适用于Android的OpenGL ES中的着色器

时间:2011-12-01 22:10:33

标签: android opengl-es shader

我开始学习OpenGL ES for Android,我遇到了一些问题。

我在互联网上看到了不同的教程,我很困惑。有一些着色器和没有着色器的教程,但它们是关于同一主题的。实际上是什么着色器,我们是否必须使用它?

哪个OpenGl版本适合创建像Racing Moto或任何3D游戏这样的游戏?

2 个答案:

答案 0 :(得分:2)

您混淆的原因可能是有两个版本的OpenGL ES可用于Android,OpenGL ES 1.x和OpenGL ES 2.0。这些彼此不兼容。 在OpenGL ES 1.1中,没有着色器。 在OpenGL ES 2.0中,需要着色器。

我建议OpenGL ES 2.0用于所有新开发;一开始工作稍微多一些,也很难理解,但在我看来,这种努力得到了回报。

答案 1 :(得分:1)

基本上,着色器是为GPU构建并执行的程序。在游戏编程中,它们通常以缓冲数据的形式从CPU接收输入,缓冲数据代表游戏中的3D几何体。还有通用GPU(GPGPU)程序,它们不一定将3D数据用于输入,但这些程序在不同的编程范围内。

我对OpenGL ES不太熟悉,但对于移动平台和其他限制性较强的硬件,不使用着色器并只使用固定功能管道是可以接受的。如果你是编程图形的初学者,那么着色器就是你不需要马上进入的东西,但是很快就能把它拿起来。 OpenGL ES是OpenGL的更精简版本。

正如沃尔夫冈所说,OpenGL ES 2.0要求您使用着色器,因为固定功能管道已经被弃用,而是留给较旧的,较慢的硬件。

也就是说,OpenGL和OpenGL ES的局限性最终来自您使用的硬件。有些手机具有比其他手机更高的像素填充率,一些硬件能够绘制到多个帧缓冲对象(更高级的功能),有些则不能。 OpenGL没有在内部为您提供这些功能 - 如果硬件具有它,它只会向程序员公开该功能。