簡體   English   中英

Three.js-查找攝像機的當前LookAt嗎?

[英]Three.js - Find the current LookAt of a camera?

我需要讀取(提取)場景中攝像機的當前外觀。 我看過以下帖子,但無法從相機獲取lookAt。

three.js設置並讀取相機外觀向量

謝謝您的幫助。

威爾特的答案非常有見地,但並不完全正確。 該代碼返回指向相機指向相同方向的向量。 那是一個很好的開始!

但是,除非攝影機位於原點(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()還將“世界點”作為參數。

lookAt不能作為向量使用,它實際上是THREE.Object3D的方法,如您在此處看到的。 該方法用於創建旋轉矩陣,該矩陣應用於對象以更改對象的旋轉(方向)。

因此,如果您想知道對象的當前方向(lookAt)是什么,則必須從對象的旋轉中提取此信息。

在局部空間中,相機向下看z軸。 如果將相機旋轉應用於該矢量,則結果為相機的lookAt或方向。

var vector = new THREE.Vector3( 0, 0, -1 );
vector.applyQuaternion( camera.quaternion );

還要檢查對類似問題的答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM