1) Вам необходимо получить положение лодки, переведя мировое пространство в локальное пространство.
// Get orca's object in regard to the target object
vec3 = this.el.object3D.worldToLocal(target.object3D.position.clone())
Чтобы лучше это понять, рассмотрим ту же схему, наблюдаемую с двух точек зрения.
С точки зрения Т, ему не нужно двигаться в направлении [0, 0, 0].Необходимо рассчитать, где находится пустое поле с его собственной точки зрения, а именно [1, -0,7, 5].Кроме того, пространство касается не только положения, но и вращения (и масштаб, что здесь не важно).Когда T вращается, положение пустого ящика будет другим.
2) Проверьте расстояние, используя THREE
s a.distanceTo(b)
.Если расстояние больше, чем вы хотите, переместите косатку:
var target = this.el.sceneEl.querySelector('a-camera'); // this should be in the init()
var vec3 = new THREE.Vector3();
var currentPosition = this.el.object3D.position;
// clone the position to operate on a copy
vec3 = this.el.object3D.worldToLocal(target.object3D.position.clone())
var distance = dt*this.data.speed / 1000;
var camFromOrca = currentPosition.distanceTo( target.object3D.position );
// if the distance is more than one meter, move the orca
if (camFromOrca > 1) {
this.el.object3D.translateOnAxis(vec3, distance);
}
скрипка сюда .На самом деле довольно жуткий:)