javascript - 在 webgl 中设置制服

标签 javascript opengl-es webgl

任何人都可以解释或指出正确的方向来很好地解释用于设置统一值的不同函数。在备忘单中 here我们得到这个:

void uniform[1234][fi](uint location, ...) void uniform[1234][fi]v(uint 位置,数组值) void uniformMatrix[234]fv(uint location, bool transpose, Array)

但我想知道它们各自在做什么以及 f 和 i 的用途。

最佳答案

1234 = 维度

f = float

i = 整数

v 最后一个字符(如果存在)是 v, 指示该命令采用值数组(向量)而不是 而不是一系列单独的论点

对于非数组 uniform,统一函数的 vnon v 版本之间的唯一区别在于您如何向它提供数据:

uniform1fv(loc,[3.14159]) 对比 uniform1f(loc,3.14159)

uniform3fv(loc,[.5,1.,.5])uniform3f(loc,.5,1.,.5)

但对于数组统一,您可以使用 v 函数设置整个数组

在着色器中

uniform float someArray[10];

在 js 中

// at init time
var location = gl.getUniformLocation(prg, "someArray");

// at render time
var arrayWith10Values = [5, 4, 1, 3, 4, 5, 12, 0.1, 2, -1];
gl.uniform1fv(location, arrayWith10Values);

要使用非 v 函数做到这一点,您必须查找每个位置

var location0 = gl.getUniformLocation(prg, "someArray[0]");
var location1 = gl.getUniformLocation(prg, "someArray[1]");
var location2 = gl.getUniformLocation(prg, "someArray[2]");
var location3 = gl.getUniformLocation(prg, "someArray[3]");
var location4 = gl.getUniformLocation(prg, "someArray[4]");
...etc...

gl.uniform1f(location0, value0);
gl.uniform1f(location1, value1);
gl.uniform1f(location2, value2);
gl.uniform1f(location3, value3);
gl.uniform1f(location4, value4);
...etc...

关于javascript - 在 webgl 中设置制服,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31049910/

相关文章:

canvas - Three.js:菲涅尔着色器 - 灯光:真正的问题

javascript - 过去 7 天内添加的用户数

image-processing - 组合多个opengl片段着色器

javascript - 无法从未定义中读取属性 "texture"

android - 移动设备(平板电脑)的可视化工具

c++ - 如何使用 OpenGL ES2、GLSL、C++ 将模型矩阵数据缓冲到纹理中?

javascript - Three.js 渲染 Canvas 的最大尺寸是多少?

javascript - 我的 mootools 延迟加载插件中存在错误

javascript - 在javascript中实例化新对象

javascript - 如何在 if else 语句中声明变量?