如何在顶点着色器中使用两个或多个属性? OpenGL ES2.0
How use two or more attribute in the vertex shader? OpenGL ES2.0
我的顶点着色器:
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 坐标,并将每一个独立地传递给同一个程序(顶点和片段着色器)。显然我在着色器中做错了,因为当我 运行 应用程序显示黑屏而不是纹理。
v_Position * v_Position1;
是 v_Position
和 v_Position1
的分量乘法 (v_Position.x * v_Position1.x
, v_Position.y * v_Position1.y
, ...)
如果 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 个分量求和,因为与 x
、[=22= 相比,第 4 个分量 w
默认设置为 1.0 ] 和 z
组件,默认为 0.0:
gl_Position = u_Matrix * vec4(v_Position.xyz + v_Position1.xyz, 1.0);
我的顶点着色器:
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 坐标,并将每一个独立地传递给同一个程序(顶点和片段着色器)。显然我在着色器中做错了,因为当我 运行 应用程序显示黑屏而不是纹理。
v_Position * v_Position1;
是 v_Position
和 v_Position1
的分量乘法 (v_Position.x * v_Position1.x
, v_Position.y * v_Position1.y
, ...)
如果 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 个分量求和,因为与 x
、[=22= 相比,第 4 个分量 w
默认设置为 1.0 ] 和 z
组件,默认为 0.0:
gl_Position = u_Matrix * vec4(v_Position.xyz + v_Position1.xyz, 1.0);