Three.js ARAME/THREE在将对象放置在摄像机前面时考虑摄像机旋转

Three.js ARAME/THREE在将对象放置在摄像机前面时考虑摄像机旋转,three.js,aframe,Three.js,Aframe,Hi有一个组件,可以将对象从其在场景中的位置移动到摄影机前面的位置 如果相机没有旋转,这可以很好地工作,但我无法让它在旋转时解释相机的旋转 //Copy the initial datas this._initialPosition = this._threeElement.position.clone() this._initialQuaternion = this._threeElement.quaternion.clone()

Hi有一个组件,可以将对象从其在场景中的位置移动到摄影机前面的位置

如果相机没有旋转,这可以很好地工作,但我无法让它在旋转时解释相机的旋转

        //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()
//复制初始数据
this.\u initialPosition=this.\u threeElement.position.clone()
this.\u initialQuaternion=this.\u threeElement.quaternion.clone()
//转换视野+减少视野
让fovInRad=AFRAME.THREE.Math.degToRad(this.\u cameraEntity.fov)/2
let ratio=window.innerWidth/window.innerHeight//假设视野垂直
让我们来讨论一下,cPos
设sizeY=this.\u size.y
设sizeX=this.\u size.x
设sizeZ=this.\u size.z
sizeX*=这个.\u三元素.scale.x
sizeY*=这个.\u三元素.scale.y
sizeZ*=这个。_三元素.scale.x
常数uSpace=0.8
sizeY/=2;sizeX/=2
sizeY*=uSpace;sizeX*=uSpace
让tanFov=Math.tan(fovInRad)
让distY=sizeY/tanFov
设distX=((sizeX/(比率*tanFov))
问题似乎是当我应用相机的矩阵时


你知道如何找到这个目标位置相对于相机面对的位置吗?

新的3.vector3(0,0,-camera.near)。应用四元数(camera.quaternion)。添加(camera.position)

回答得好,谢谢。在一帧中,我不得不使用相机的父母的立场,但它的作品伟大