簡體   English   中英

Three.js - 如何旋轉對象以查看一個點並朝向另一個點

[英]Three.js - How to rotate an object to lookAt one point and orient towards another

我對three.js和3d編程很新,所以這看起來像一個非常簡單的問題。 理想情況下,我希望答案可以幫助我理解基本原則。

我有一個對象需要在另一個點(原點,在這種情況下為了簡單起見)“指向”,這可以使用Object3D.lookAt(point)函數輕松完成。 這很好地指向了物體的Z軸。

我還想圍繞其Z軸旋轉我的對象(稱為looker ,使其X軸通常指向另一個對象refObj 我知道X軸不能直接指向refObj除非該對象與原點形成直角。 我想要的X軸looker趴在被創建的平面originrefObjlooker ,圖示如下:

問題圖

進行旋轉的最簡單方法似乎是修改looker.rotation.z ,但我不知道如何計算值應該是什么。

一般來說,我lookAt一個lookAt函數的擴展版本,它采用X軸定向的第二個坐標。 像這樣的東西:

function lookAtAndOrient(objectToAdjust, pointToLookAt, pointToOrientXTowards)
{
  // First we look at the pointToLookAt
  objectToAdjust.lookAt(pointToLookAt);

  // Then we rotate the object
  objectToAdjust.rotation.z = ??;
}

用上面的例子創建了一個jsFiddle

你真正要說的是你想要對象的y軸(對象的up向量)與平面正交。

在調用lookAt( origin )之前,您所要做的就是設置對象的up向量。

up通過獲取您知道位於平面中的兩個向量的交叉積來計算所需的up矢量。

這是一個工作小提琴: http//jsfiddle.net/rQasN/43/

請注意,您的問題有兩種解決方案,因為計算向量和它的否定都將與平面正交。

編輯:小提琴更新為three.js r.71

暫無
暫無

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

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