当我构造正方形数组然后将其传递给新的Float32Array时,我得到一个错误,但是,当我将temp传递给Float32Array(并手动将numTriangles指定为6)时,一切正常... asdf两次尝试都记录到控制台,不知道为什么会这样。
var square = [[-1,-1,],[1,-1],[-1,1],[-1,1],[1,-1],[1,1]];
var numTriangles = square.length;
square = square.join();
var temp = [-1,-1,1,-1,-1,1,-1,1,1,-1,1,1];
if (square == temp) {
console.log("asdf");
}
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(square),gl.STATIC_DRAW);
gl.enableVertexAttribArray(positionLocation);
gl.vertexAttribPointer(positionLocation, 2, gl.FLOAT, false, 0, 0);
gl.drawArrays(gl.TRIANGLES, 0, numTriangles); //numTriangles == 6
答案 0 :(得分:1)
方法join()
produces a string,而不是数组。 Float32Array不能将字符串或二维数组作为参数。
一种有点hackish的解决方法是在join()之后解析字符串为JSON:
var square = [[-1,-1],[1,-1],[-1,1],[-1,1],[1,-1],[1,1]],
float;
float = new Float32Array(JSON.parse("[" + square.join() + "]"));
console.log(float);
然而,这会对性能产生影响。更好的方法是在更新类型化数组时循环遍历数组并展平它:
var square = [[-1,-1],[1,-1],[-1,1],[-1,1],[1,-1],[1,1]],
len = square.length,
float = new Float32Array(len * 2),
i = 0, t = 0;
while(i < len) {
float[t++] = square[i][0];
float[t++] = square[i++][1];
}
console.log(float);
后者有更多代码,但比第一种方法many times faster。
PS:阵列中还有一个额外的逗号,不应该存在。
答案 1 :(得分:0)
square
和temp
指向的数组是对相应数组的引用。所以这些引用总是不同的,因为第一个是.join()
方法的结果,第二个是对静态内联数组的引用。
您需要在一个循环中比较两个数组的每个元素。