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



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

星系是点。

问题 1.htm 使用 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 来创建 galaxydata2.txt。

问题 2.htm 使用 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] ));

可以验证变换是否准确,因为问题 1.htm 和问题 2.htm 生成完全相同的模型。

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

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

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

令人困惑的是,虽然星系搜索功能在问题1.htm中起作用,但在问题2.htm中不起作用!

自过去两天以来,我花了数十个小时试图找到原因,但无法得到它的头或尾。

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

最有可能的是,我错过了一些专家可以立即清楚的东西。

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

搜索函数中的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。

最新更新