gpt4 book ai didi

javascript - WebGL 片段着色器颜色未生效

转载 作者:行者123 更新时间:2023-11-30 14:06:43 24 4
gpt4 key购买 nike

我有这段代码:

var FSHADER_SOURCE = `
precision mediump float;
uniform vec4 u_FragColor;

void main() {
gl_FragColor = u_FragColor;
}`;

还有一个改变片段着色器颜色的函数:

var gl = getWebGLContext(canvas);
var u_FragColor = gl.getUniformLocation(gl.program, 'u_FragColor');

// lines to set rgb
gl.uniform4f(u_FragColor, rgb[0], rgb[1], rgb[2], rgb[3]);

奇怪的是,我可以看到 rgb 设置为类似 [0,1,0,1] 但片段着色器的颜色无论如何都是黑色的。即使我将代码更改为:

// still black
gl.uniform4f(u_FragColor, 0.0, 1.0, 0.0, 1.0);

更改颜色的唯一方法是直接修改 rgb channel 而不使用 u_FragColor。我在这里缺少什么?


完整的代码也在 gist 上如果有帮助。

最佳答案

一个活跃的程序资源,比如统一变量的位置,可以在程序被链接后获取:

gl.linkProgram(gl.program);
var u_FragColor = gl.getUniformLocation(gl.program, 'u_FragColor');

但是,要设置统一变量的值,程序必须作为当前程序安装。 uniform*将值设置为与当前使用的程序的位置相关联的制服。注意,gl.uniform4f 程序没有参数,受影响的程序是当前程序:

gl.useProgram(gl.program);
gl.uniform4f(u_FragColor, rgb[0], rgb[1], rgb[2], rgb[3]);

关于javascript - WebGL 片段着色器颜色未生效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55245248/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com