我正在查看three.js中的代码,特别是用于创建球体的THREE.SphereGeometry方法: https://github.com/mrdoob/three.js/blob/master/src/extras/geometries/SphereGeometry.js
有两组循环 - 我正在看第二组循环。
我的问题是: 创建了一个数组数组,称为顶点。在这个数组中添加了对象数组。
稍后,使用索引检索单个对象,具体为:
var v1 = vertices[ y ][ x + 1 ];
然后,就在这之下,似乎再次引用该对象,但是通过以下语法:
var n1 = this.vertices[ v1 ].clone().normalize();
尽我所能,这对我来说似乎是一个错误..不会this.vertices[v1]
返回undefined?
答案 0 :(得分:3)
我认为导致这种混淆的原因是this.vertices
vs vertices
。它们实际上是两种不同的结构。
// 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();
}
答案 1 :(得分: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`