我的顶点着色器:
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坐标数组,并将每个数组分别传递给同一程序(顶点和片段着色器)。显然,我在着色器中做错了,因为当我运行应用程序时,显示的是黑屏,而不是纹理。
答案 0 :(得分:0)
v_Position * v_Position1;
是v_Position
和v_Position1
(v_Position.x * v_Position1.x
,v_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个分量求和,因为与w
,x
和y
相比,第4个分量z
默认情况下设置为1.0。 gl_Position = u_Matrix * vec4(v_Position.xyz + v_Position1.xyz, 1.0);
组件,默认为0.0:
{{1}}