1

Chrome 22升级(9 月 25 日稳定发布)以来,我在我的程序中发现了一个我不明白的新错误。

我的 javascript 程序执行以下操作:

  1. arraybuffer使用 asynchrone获取二进制文件(STL 网格)XMLHttpRequest
  2. 加载文件时,使用DataView和调用读取方法解析它data.getFloat32(offset, isLittleEndian)data.getUint32(offset, isLittleEndian)。解析数据存储在用于加载和解析文件的对象数组中。
  3. 我实施了一个屏障,以确保在继续之前等待所有文件加载
  4. 加载所有文件后,我会遍历每个加载器,并使用解析并存储在数组中的数据在 for 循环中创建对象,如下所示:

    var geom = new THREE.Geometry();
    for(var v = 0; v < this.result[0].length; v++) {
        geom.vertices.push(new THREE.Vertex(new THREE.Vector3(this.result[0][v][0],
                                                              this.result[0][v][1],
                                                              this.result[0][v][2])));
    }
    
    for(var f = 0; f < this.result[1].length; f++) {
        geom.faces.push(new THREE.Face3(this.result[1][f][0],
                                        this.result[1][f][1],
                                        this.result[1][f][2]));
    }
    
  5. 问题是,在这些循环之后,数组geom.facesundefined

我找到了一种纠正这种行为的方法,但我不明白为什么它会改变任何东西:我将数组的长度存储在变量中,如下所示:

var geom = new THREE.Geometry();
var vl = this.result[0].length; // <===  | these are the added variables
var fl = this.result[1].length; // <===  | that fix the bug
for(var v = 0; v < vl; v++) {
    geom.vertices.push(new THREE.Vertex(new THREE.Vector3(this.result[0][v][0],
                                                          this.result[0][v][1],
                                                          this.result[0][v][2])));
}

for(var f = 0; f < fl; f++) {
    geom.faces.push(new THREE.Face3(this.result[1][f][0],
                                    this.result[1][f][1],
                                    this.result[1][f][2]));
}

如果有人可以向我解释发生了什么以及为什么我在我的代码的第一个版本中丢失了我的数组,那将非常感激。

4

0 回答 0