如何在顶点着色器中使用两个或多个属性? OpenGL ES2.0

时间:2018-06-20 11:14:36

标签: opengl-es glsl

我的顶点着色器:

uniform mat4 u_Matrix;
attribute vec4 v_Position;
attribute vec4 v_Position1;
attribute vec2 a_texCoord;
attribute vec2 a_texCoord1;
varying vec2 v_texCoord;
varying vec2 v_texCoord1;

void main() {
    gl_Position = u_Matrix * v_Position * v_Position1; /*I guess that 
    this is not possible.*/
    v_texCoord = a_texCoord;
    v_texCoord1 = a_texCoord1;
}

还有我的片段着色器:

precision mediump float;
varying vec2 v_texCoord;
varying vec2 v_texCoord2;
uniform sampler2D u_texture;
uniform sampler2D u_texture2;
vec4 col1;
vec4 col2;

void main() {
    col1 = texture2D(u_texture, v_texCoord);
    col2 = texture2D(u_texture2, v_texCoord2);
    gl_FragColor = col1 + col2;
}

我想要的是拥有两个或多个数据和UV坐标数组,并将每个数组分别传递给同一程序(顶点和片段着色器)。显然,我在着色器中做错了,因为当我运行应用程序时,显示的是黑屏,而不是纹理。

1 个答案:

答案 0 :(得分:0)

v_Position * v_Position1;v_Positionv_Position1v_Position.x * v_Position1.xv_Position.y * v_Position1.y,...)的按分量乘积

如果eiher v_Position等于(0,0,0,0)v_Position1(0,0,0,0)比您可以使用v_Position + v_Position的方式要好,其中向量是按分量进行汇总的:

gl_Position = u_Matrix * (v_Position + v_Position1);

但是,我建议只对向量的前3个分量求和,因为与wxy相比,第4个分量z默认情况下设置为1.0。 gl_Position = u_Matrix * vec4(v_Position.xyz + v_Position1.xyz, 1.0); 组件,默认为0.0:

{{1}}