ARAME / THREE учитывает поворот камеры, когда объект находится перед камерой - PullRequest
0 голосов
/ 12 февраля 2020

Привет, есть компонент, который перемещает объект из его положения в сцену в положение перед камерой.

Это прекрасно работает, если камера не была повернута, но я не могу учесть ее поворот камеры после поворота.

        //Copy the initial datas
        this._initialPosition = this._threeElement.position.clone()
        this._initialQuaternion = this._threeElement.quaternion.clone()

        //Convert fov + reduce it
        let fovInRad = AFRAME.THREE.Math.degToRad(this._cameraEntity.fov)/2
        let ratio=window.innerWidth/window.innerHeight //Assuming the FOV is vertical
        let pLocal,cPos

        let sizeY = this._size.y
        let sizeX = this._size.x
        let sizeZ = this._size.z

        sizeX*=this._threeElement.scale.x
        sizeY*=this._threeElement.scale.y
        sizeZ*=this._threeElement.scale.x

        const uSpace= 0.8
        sizeY/=2;sizeX/=2
        sizeY*=uSpace;sizeX*=uSpace

        let tanFov = Math.tan(fovInRad)
        let distY = sizeY/tanFov
        let distX = ((sizeX/(ratio*tanFov)) < distY) ? distY : sizeX/(ratio*tanFov)

        pLocal = new AFRAME.THREE.Vector3(0, 0, -(distX + sizeZ))
        cPos = this._cameraEntity.position.clone()
        cPos.y += 1.6

        this._targetPosition = pLocal.applyMatrix4(this._cameraEntity.matrixWorld.clone())
        this._threeElement.parent.worldToLocal(this._targetPosition)
        let targetLook = cPos.applyMatrix4(this._cameraEntity.matrixWorld.clone())
        this._threeElement.parent.worldToLocal(targetLook)
        this._threeElement.position.copy(this._targetPosition)
        this._threeElement.lookAt(targetLook)
        this._targetQuaternion = this._threeElement.quaternion.clone()

Кажется, проблема заключается в том, что я применяю матрицу камеры.

Любая идея, как найти это целевое положение относительно того, где камера смотрит

1 Ответ

1 голос
/ 12 февраля 2020

Новый three.vector3 (0,0, -camera.near) .applyQuaternion (camera.quaternion) .add (camera.position)

...