大家好,我正在学习 webgl,我无法获取特殊变量的位置 这是代码
顶点着色器
uniform vec2 u_translation;
attribute vec2 a_position;
uniform vec2 u_resolution;
void main() {
vec2 position = a_position + u_translation;
vec2 zeroToOne = a_position / u_resolution;
vec2 zeroToTwo = zeroToOne * 2.0;
vec2 clipSpace = zeroToTwo - 1.0;
gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1);
}
片段着色器
precision mediump float;
uniform vec4 u_color;
void main() {
gl_FragColor = u_color;
}
var translationLocation = gl.getUniformLocation(program, "u_translation");
var positionLocation = gl.getAttribLocation(program, "a_position");
var resolutionLocation = gl.getUniformLocation(program, "u_resolution");
var colorLocation = gl.getUniformLocation(program, "u_color");
// translationLocation is null but i can get the others
有人知道发生了什么事吗?我想我在着色器中使用了“u_translation”
局部变量
position
没有在着色器中的任何地方使用,因此不需要和优化掉 u_translation
。所以它不会成为一个活动的程序资源,也不会得到一个统一的位置。下一行可能是错误的
vec2 zeroToOne = a_position / u_resolution;
但应该是
vec2 zeroToOne = position / u_resolution;
现在局部变量
position
在着色器程序中使用,因此u_translation
成为一个活跃的程序资源。