2013-06-29 255 views
0

當我登錄我的this.kernel時,值不會改變。但我認爲他們應該。 繼它應該工作的文件,http://glmatrix.net/docs/2.2.0/symbols/vec3.html#.normalizeglMatrix不能正常工作?

this.kernel = []; 
    this.kernelSize = 16.0; 
    var max = 1.0; 
    var min = -1.0; 
    var a = Math.random(); 

for (var i = 0; i < this.kernelSize; i++){ 
    this.kernel.push(Math.random() * (max - min) + min); // random float, range -1..1 
    this.kernel.push(Math.random() * (max - min) + min); 
    this.kernel.push(Math.random()); //random float, range 0..1 

    vec3.normalize([this.kernel[i * 3], this.kernel[i * 3 + 1], this.kernel[i * 3 + 2]], [this.kernel[i * 3], this.kernel[i * 3 + 1], this.kernel[i * 3 +2]]); 
    console.log(this.kernel); 
    vec3.multiply([this.kernel[i * 3], this.kernel[i * 3 + 1], this.kernel[i * 3 + 2]], a, 1.0); 
    console.log(this.kernel); 

} 
+0

功能分配結果反饋給this.kernel ? –

+0

我想取最後三個創建的值(表示x,y,z),進行歸一化,然後對它們進行縮放。 – Pris0n

回答

0

只要勾選API,你正面臨着一個相當基本的問題,像X = F(x)的;

vec3.normalize()返回輸入內核的修改版本(見下文)

http://glmatrix.net/docs/2.2.0/symbols/src/gl-matrix_src_gl-matrix_vec3.js.%3Chtml

333 /** 
334 * Normalize a vec3 
335 * 
336 * @param {vec3} out the receiving vector 
337 * @param {vec3} a vector to normalize 
338 * @returns {vec3} out 
339 */ 
340 vec3.normalize = function(out, a) { 
341  var x = a[0], 
342   y = a[1], 
343   z = a[2]; 
344  var len = x*x + y*y + z*z; 
345  if (len > 0) { 
346   //TODO: evaluate use of glm_invsqrt here? 
347   len = 1/Math.sqrt(len); 
348   out[0] = a[0] * len; 
349   out[1] = a[1] * len; 
350   out[2] = a[2] * len; 
351  } 
352  return out; 
353 }; 

只是做

this.kernel = vec3.normalize([this.kernel[i * 3], this.kernel[i * 3 + 1], this.kernel[i * 3 + 2]], [this.kernel[i * 3], this.kernel[i * 3 + 1], this.kernel[i * 3 +2]]); 
this.kernel = vec3.multiply([this.kernel[i * 3], this.kernel[i * 3 + 1], this.kernel[i * 3 + 2]], a, 1.0); 
+0

@PrisOn它仍然不適合你? –