2015-06-25 72 views
1

任何人都可以解釋或指出我正確的方向來解釋用於設置統一值的不同功能。在小抄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的和我的是。

+0

當然。作爲一個低級的javascript開發人員漂浮,整數不在我的頭腦。我猜想v指的是向量,但爲什麼會在uniformMatrix上有v,並且爲什麼你只能創建一個維度的uniform1fv。那不會和uniform1f一樣嗎? – adamdaly

+0

我已將我的意見合併到答案中 –

+0

對您有幫助嗎? http://webglfundamentals.org/webgl/lessons/webgl-shaders-and-glsl.html – gman

回答

2

1234 =尺寸

f =浮

i =整數

v最後一個字符,如果存在的話,爲v, 指示命令採用的值的陣列(矢量)而不是 比一系列單個參數

對於非數組均勻唯一差分vnon 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... 
+0

謝謝,我現在明白了。 – adamdaly

2

這不是很難理解。

方括號內的值是指變量的維數和數據類型。所以,你有以下列表

  • 1 - 一個價值
  • 2 - 兩個數值
  • 3 - 三個值
  • 4 - 四個值
  • 的F - 你的數據是float
  • 我 - 你的數據類型是整數
  • N - 你的數據指的是一個數組

在WebGL規範中有更多關於這方面的信息。

+0

感謝您的回覆。 – adamdaly