0

我正在关注使用 OpenGL 在 android 上开发 2D 游戏的真正完整教程,我遇到了以下问题

static final String VERTEX_SHADER_CODE =
        "uniform mat4 u_mvpMatrix;" +
        "attribute vec4 a_position;" +

        "void main() {" +
        "  gl_Position = u_mvpMatrix * a_position;" +
        "}";

static final String FRAGMENT_SHADER_CODE =
        "precision mediump float;" +
        "uniform vec4 u_color;" +

        "void main() {" +
        "  gl_FragColor = u_color;" +
        "}";

我是 OpenGL 的新手,所以我想知道该代码是什么意思?或者我在哪里可以阅读更多关于它的信息。

我还阅读了有关 GL 程序的信息,我也想知道那是什么。

4

1 回答 1

3

这是将由图形芯片执行的两段代码。该代码是用GLSL ES编写的,这是一种基于桌面 OpenGL 的 GLSL 1.20 的语言。

第一段代码是顶点着色器;它对每个顶点执行。第二个是片段着色器;它针对光栅化几何的每个像素执行。你的例子只是最低限度的,甚至可能更少。例如,着色器代码通常执行光照计算。这里缺少这些计算;渲染的输出看起来不像 3D 对象。后面的教程将添加这些计算。

如果您从 Android 上的 OpenGL 和 GLSL 开始,最好阅读一本像这样的 OpenGL ES2.0 书籍。也有专门针对GLSL的书籍,但一般的 OpenGL 书籍涵盖了您入门时所需的一切。

还有一点需要注意:一些 Android 教程和示例应用程序将着色器代码存储在字符串文字中,就像您发布的那样。编写这样的代码实际上是相当痛苦的(没有换行符,没有语法高亮)。您可能希望从单独的文本文件中读取着色器程序。

于 2013-09-14T16:12:49.383 回答