任何人都可以解釋或指出我正確的方向來解釋用於設置統一值的不同功能。在小抄here我們得到這樣的:在webgl中設置制服
void uniform[1234][fi](uint location, ...) void uniform[1234][fi]v(uint location, Array value) void uniformMatrix[234]fv(uint location, bool transpose, Array)
,但我想知道每一種是做什麼的F的和我的是。
任何人都可以解釋或指出我正確的方向來解釋用於設置統一值的不同功能。在小抄here我們得到這樣的:在webgl中設置制服
void uniform[1234][fi](uint location, ...) void uniform[1234][fi]v(uint location, Array value) void uniformMatrix[234]fv(uint location, bool transpose, Array)
,但我想知道每一種是做什麼的F的和我的是。
1234
=尺寸
f
=浮
i
=整數
v
最後一個字符,如果存在的話,爲v, 指示命令採用的值的陣列(矢量)而不是 比一系列單個參數
對於非數組均勻唯一差分v
和non v
版本的統一功能之間e是隻是你如何提供數據給它:
uniform1fv(loc,[3.14159])
VS uniform1f(loc,3.14159)
。
uniform3fv(loc,[.5,1.,.5])
VS uniform3f(loc,.5,1.,.5)
但用於陣列均勻就可以在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
功能
在着色器
uniform float someArray[10];
要做到設置整個陣列那與非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...
謝謝,我現在明白了。 – adamdaly
這不是很難理解。
方括號內的值是指變量的維數和數據類型。所以,你有以下列表
在WebGL規範中有更多關於這方面的信息。
感謝您的回覆。 – adamdaly
當然。作爲一個低級的javascript開發人員漂浮,整數不在我的頭腦。我猜想v指的是向量,但爲什麼會在uniformMatrix上有v,並且爲什麼你只能創建一個維度的uniform1fv。那不會和uniform1f一樣嗎? – adamdaly
我已將我的意見合併到答案中 –
對您有幫助嗎? http://webglfundamentals.org/webgl/lessons/webgl-shaders-and-glsl.html – gman