我需要讀取(提取)場景中相機的當前外觀。我看過以下帖子,但我無法從相機中看到它。Three.js - 找到相機的當前LookAt?
three.js set and read camera look vector
謝謝您的幫助。
我需要讀取(提取)場景中相機的當前外觀。我看過以下帖子,但我無法從相機中看到它。Three.js - 找到相機的當前LookAt?
three.js set and read camera look vector
謝謝您的幫助。
lookAt
不可用作矢量,它實際上是一個在THREE.Object3D
中的方法,您可以看到here。該方法用於創建旋轉矩陣,該矩陣應用於對象以更改對象的旋轉(方向)。
所以如果你想知道對象的當前方向(lookAt)是什麼,你必須從對象的旋轉中提取這些信息。
在本地空間中,攝像頭正在俯視z軸。如果將相機旋轉應用於該矢量,結果爲相機的lookAt
或方向。
var vector = new THREE.Vector3(0, 0, -1);
vector.applyQuaternion(camera.quaternion);
也檢查this answer到類似的問題。
Wilt的這個答案很有洞察力,但不完全正確。代碼返回一個指向相機指向相同方向的矢量。這是一個很好的開始!但是除非攝像機位於原點(0,0,0)(或者恰好位於將原點連接到旋轉的矢量點而沒有超過該點的線段上,以便該點位於相機後面)相機不會看這一點。顯然 - 僅僅是常識 - 攝像頭的位置也影響着正在觀察的點。考慮一下。無論相機在哪裏,相機方法lookAt()
都會查看3D空間中的一個點。因此,通過調用拿到一分,該相機在看着你需要調整攝像頭位置:
vec.add(camera.position);
還值得一提的是,相機在單點不是看,而是低頭一系列無限數量的點,每個點與相機距離不同。上述來自Wilt的代碼返回的矢量長度恰好是一個單位,因爲將四元數應用於歸一化的z軸矢量(0,0,-1)將返回另一個歸一化矢量(以不同的方向)。從照相機使用計算的外表在點在任意的距離x
:
(new THREE.Vector3(0, 0, -x)).applyQuaternion(camera.quaternion).add(camera.position);
這從原點取沿着z軸的點的距離x
,它旋轉到攝像機的方向然後通過添加相機的位置創建一個「世界點」。我們想要一個「世界點」(而不是「相對於相機點」),因爲camera.lookAt()
也需要一個「世界點」作爲參數。
謝謝你的幫助。我添加了上面的代碼並在控制檯中接收了向量的值:{x:0,y:0,z:-1,構造函數:function,set:function ...}。然後我嘗試了vector.applyEuler(camera.rotation,camera.eulerOrder);並收到此:{x:-0.5773502588272095,y:-0.5773502743708339,z:-0.5773502743708337,構造函數:function,set:function ...}。這些值可能顯示相機的當前旋轉。糾正我,如果我錯了。那麼我需要找到相機在哪裏看?不知道如何! – mbehnaam
如果你希望得到一個空間點,我不得不讓你失望。相機不看一點,但它從相機原點(位置)看到您計算的方向。 – Wilt