我正在尝试为 Open GL ES 2.0 学习 GLSL。我已经查看了教程,但解释中显然缺少一些东西,因为它完全没有意义。拿下面的代码。这是从官方 OpenGL ES 2.0 参考卡中提取的。
这应该是顶点着色器。
uniform mat4 mvp_matrix; // model-view-projection matrix
uniform mat3 normal_matrix; // normal matrix
uniform vec3 ec_light_dir; // light direction in eye coords
attribute vec4 a_vertex; // vertex position
attribute vec3 a_normal; // vertex normal
attribute vec2 a_texcoord; // texture coordinates
varying float v_diffuse;
varying vec2 v_texcoord;
void main(void)
{
// put vertex normal into eye coords
vec3 ec_normal = normalize(normal_matrix * a_normal);
// emit diffuse scale factor, texcoord, and position
v_diffuse = max(dot(ec_light_dir, ec_normal), 0.0);
v_texcoord = a_texcoord;
gl_Position = mvp_matrix * a_vertex;
}
问题 1:什么都没有初始化。一开始列出了 8 个变量/对象,没有一个被初始化。所以我们有 8 个空变量/对象。
问题2:初始化的变量/对象是使用前面8个空变量/对象初始化的。太好了,所以现在一切都是空的......
问题 3:函数没有传递任何内容。这怎么能遮蔽任何东西是我无法理解的,它什么也不进,也不出什么。它所涉及的唯一可能产生影响的是 gl_Position ,它显然是某种特殊的输出变量。但它只取决于 mvp_matrix 和 a_vertex 那么其他的东西有什么用呢?
这不仅仅是这个例子,这是我迄今为止找到的所有例子。我不明白如何声明一堆变量,不使用其中的大部分,然后在整个地方传递/分配空对象可以做任何事情。