在开发Andoird OpenGL时,创建的顶点和片段着色器如何工作?
我基本上遵循OpenGL ES上的Android开发人员指南示例。但是,在创建着色器时,首先会创建一个包含代码段的String。我试图了解此字符串段如何与其余过程联系在一起,但我做不到。
private final String vertexShaderCode =
"attribute vec4 vPosition;"+
"void main(){"+
" gl_position = vPosition;"+
"}";
答案 0 :(得分:0)
看看图形管道:
顶点着色器的主要工作是将每个顶点的位置从相机(现实世界)空间转换/转换为称为 Normalized Device Space 的特殊空间。 。输出位置存储在内置变量gl_Position
中。每个顶点由顶点着色器的一个实例执行。因此,如果您有100个顶点,则将执行100个顶点着色器实例。
您发布的顶点着色器代码实际上并没有进行任何重大转换:gl_position = vPosition
,但这很好,因为作者希望输入位置已经在 Normalized Device Space 中。 >
然后在归一化设备空间中,将这些位置组装为基本体(例如三角形)。接下来,在栅格化阶段,这些基元被分解为片段(为简单起见,可以将其视为像素)。然后,每个片段进入片段着色器以计算该片段的颜色。每个片段都由片段着色器的一个实例执行。
一次,在管道中仅使用一对顶点着色器和片段着色器。这是由OpenGL ES命令glUseProgram(program)
指定的,其中程序只是一对顶点和片段着色器。
您发布的字符串是顶点着色器的源代码,您还将看到相应片段着色器的源代码。我们使用OpenGL ES命令来创建着色器,设置其源代码(您看到的字符串段),对其进行编译,将它们附加到程序,链接该程序并使用该程序。
为了真正理解所有这些内容,建议您阅读this book。上图是从那本书中拍摄的。