我正在使用THREE JS。我有一个球体对象(使用THREE.SphereGeometry制作),在这个球体内部我有另一个较小的球体。两个球体都具有相同的中心(因此较小的球体恰好位于较大球体的中间)。我的相机位于较大的球体内部,我可以看到更大球体的内部表面(我在3D商店内)。在这里,我创造了更大的外球:
setupSphereProjection() {
// creation of a big sphere geometry
//THREE.SphereGeometry(SPHERE RADIUS, WIDTH SEGMENTS, HEIGHT SEGMENTS)
this.sphere = new THREE.SphereGeometry(sphereRadius, 40, 40);
this.sphere.applyMatrix(new THREE.Matrix4().makeScale(-1, 1, 1));
// creation of the sphere material
let sphereMaterial = new THREE.MeshBasicMaterial();
let loader = new THREE.TextureLoader();
loader.crossOrigin = "anonymous";
sphereMaterial.map = loader.load(testImage);
// geometry + material = mesh (actual object)
this.sphereMesh = new THREE.Mesh(this.sphere, sphereMaterial);
this.scene.add(this.sphereMesh);
}
我的设置是这样的,当我点击较大球体的表面时,我得到更大球体表面上点击的XYZ坐标。我想要的是让较小的球体旋转以面向XYZ坐标的位置。 (因此,当用户点击较大球体的表面时,较小的球体旋转以查看外球体上的点击位置)。这是我点击外球体表面(半径为100)时得到的THREE.Vector3:
THREEE.Vector3 {x: -8.755543860298761, y: -2.284054920077946, z: -99.22118491615181}
我努力将XYZ坐标转换为内球的旋转。我不确定是否应该使用四元数或欧拉角或两者。我尝试过不同的方法,到目前为止还没有一种方法可行。任何帮助/建议都会受到热烈欢迎。