TrackballControls.target 在 Three.js 中的特殊行为

Peculiar behavior of TrackballControls.target in Three.js

我正在尝试创建星系的 3D 分布模拟。

星系是点。

question1.htm uses galaxydata1.txt计算并加载星系位置:

rawFile.open("GET", "galaxydata1.txt", false);

var parts = data[i].split("\t");

var D = parts[0];
var glon = parts[1]*3.1416/180;
var glat = parts[2]*3.1416/180;

var z = D*Math.sin(glat);
var xy = D*Math.cos(glat);
var x = xy*Math.cos(glon);
var y = xy*Math.sin(glon);

dotGeometry.vertices.push(new THREE.Vector3( x, y, z ));                

我希望模拟在资源有限的设备上运行。所以,我想我可以预先计算位置并将它们保存在文件中。

我用 write.htm to create galaxydata2.txt.

做了这个

question2.htm uses galaxydata2.txt 加载星系位置:

var parts = data[i].split(" ");

rawFile.open("GET", "galaxydata2.txt", false);

dotGeometry.vertices.push(new THREE.Vector3( parts[0], parts[1], parts[2] ));

可以验证转换是准确的,因为两个question1.htm and question2.htm生成完全相同的模型。

现在,我已经实现了一个星系搜索功能,它按名称搜索一个星系并将其居中使用:

controls.target = dots.geometry.vertices[i];

您可以通过搜索 m31(仙女座星系的名称之一)来尝试。

令人困惑的是,星系搜索功能在 question1.htm, it doesn't work in question2.htm!

中有效

自从过去 2 天以来,我已经花了几十个小时试图找到原因,但 无法弄清原因。

请注意,我使用了完全相同的代码来计算两种情况下的位置。

很可能,我遗漏了一些专家会立即清楚的东西。

如果/可能的话,请指导我。

你的搜索函数中的 dots.geometry.vertices 没有被转换成浮点数。它们都是字符串。

1: n {x: "-34.10470732858122", y: "95.77578953486031", z: "-66.52906941334713 “} 2:n{x:“-23.203470164906907”,y:“64.44921156287786”,z:“-43.97565350543055 “} 3:n{x:“-22.228259825915906”,y:“57.0117730686664”,z:“-31.448405312168955 "}

所以那是行不通的。

加载数据后,您需要对数据执行 .parseFloat 操作,然后再将其填充到几何体中。