2

私はthree.jsのコード、具体的には球を作成するためのTHREE.SphereGeometryメソッドを見ています: https ://github.com/mrdoob/three.js/blob/master/src/extras/geometries/SphereGeometry.js

2セットのループがあります-私は2番目のループを見ています。

私の質問はこれです:頂点と呼ばれる、作成された配列の配列があります。この配列には、オブジェクトの配列が追加されます。

後で、インデックスを使用して単一のオブジェクトが取得されます。具体的には、次のとおりです。

var v1 = vertices[ y ][ x + 1 ];

次に、このすぐ下で、オブジェクトが再び参照されているように見えますが、次の構文によって行われます。

var n1 = this.vertices[ v1 ].clone().normalize();

私ができる限り試してみてください、これは私にはバグのようです..this.vertices[v1]未定義を返しませんか?

4

2 に答える 2

3

これを混乱させるのはvsだと思います。それらは実際には2つの異なる構造です。this.verticesvertices

// first loop
for (...) {
    /* ... */

    // this.verticies will have every vertex
    this.vertices.push( vertex );

    verticesRow.push( this.vertices.length - 1 );
    /* ... */
}

// notice we pushed a row of vertices to `vertices` not `this.verticies`
vertices.push( verticesRow );


// second loop
for (...)  for (...) {
    // grab the vertex from the local list
    var v1 = vertices[ y ][ x + 1 ];

    // use it to grab something from the object's list
    var n1 = this.vertices[ v1 ].clone().normalize();
}
于 2012-11-02T20:31:45.750 に答える
0

その特定の例についてはわかりませんが、これは有効であり、必ずしもエラーではない、考案されたデータ構造です。

x = 1
y = 2

vertices = ["","",["","x",3],"the third element"]

var v1 = vertices[y][x+1] // v1 is `3`

var n1 = this.vertices[v1]

alert(n1)
// alerts `the third element`
于 2012-11-02T20:25:59.703 に答える