我是webgl的新手。我正在尝试设置时间统一,所以我可以随着时间的推移更改片段着色器的输出。我认为实施起来相当简单,但我很挣扎。我知道可能涉及这两种方法:
https://developer.mozilla.org/en-US/docs/Web/API/WebGLUniformLocation
https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/uniform
是否需要某种渲染循环?
非常感谢这里的任何帮助,谢谢。
答案 0 :(得分:2)
这是我目前的解决方案......
在我的webgl JS文件中,我创建了一个时间统一,然后使用更新的值设置每个动画帧。
// create time uniform
var timeLocation = context.getUniformLocation(program, "u_time");
function renderLoop(timeStamp) {
// set time uniform
gl.uniform1f(timeLocation, timeStamp/1000.0);
gl.drawArrays(...);
// recursive invocation
window.requestAnimationFrame(renderLoop);
}
// start the loop
window.requestAnimationFrame(renderLoop);
然后在我的片段着色器中:
precision mediump float;
uniform float u_time;
void main() {
gl_FragColor = vec4(abs(sin(u_time)),0.0,0.0,1.0);
}