簡體   English   中英

three.js通過軌道控制獲得攝像機位置

[英]three.js get camera position with orbit controls

我正在使用three.js軌道控件並試圖讓天空盒跟隨相機的位置。 搜索過互聯網后,我找不到合適的答案。

我的問題很簡單 - 如何在使用軌道控制時檢索攝像機的坐標,以下不起作用:

skybox.position.x = camera.position.x;  //Moving skybox with camera
skybox.position.z = camera.position.z;  //Moving skybox with camera
skybox.position.y = camera.position.y;  //Moving skybox with camera

x和z坐標的值不正確。 我也嘗試過:

orbit_controls.object.target

相反,但這導致類似的錯誤行為,x和z返回不正確的值。

對控制機制的看似明顯的要求似乎非常難以實現。

沒有答案,我做了一些額外的測試,我發現需要一個坐標系轉換來檢索相機的正確坐標。

以下內容將檢索攝像機在標准世界(x,y,z)空間中的當前位置,並將其應用於天空盒。

newZ = -(camera.position.x * Math.cos(5.49779)) - (camera.position.z * Math.sin(5.49779));
newX = (camera.position.x * Math.cos(0.78)) + (camera.position.z * Math.sin(0.78));

skybox.position.x = newX;   //Moving skybox with camera
skybox.position.z = newZ;   //Moving skybox with camera
skybox.position.y = camera.position.y;  //Moving skybox with camera

由於我在其他地方找不到這個答案,我希望這對其他人有用,它解決了我的問題。

我有同樣的問題,我所做的是在OrbitControls.js文件中包含以下幾行代碼到THREE.OrbitControls函數。

THREE.OrbitControls = function ( object, domElement ) {

    .
    .
    .

  this.getPos = function() {
    pos = new THREE.Vector3();
    pos.copy( this.object.position );
    return  pos;
  };
  this.getCenter = function() {
    cent = new THREE.Vector3();
    cent.copy( this.center );
    return cent;
  };
    .
    .
    .
}

this.object它指向你在創建Controls對象時給出的相機對象,this.center是一個THREE.Vector3(),初始化為(0,0,0),定義了你的相機在哪里看。

而且效果很好。 如您所見,有兩個吸氣功能,一個取相機位置,另一個取中心。 然后我從我的代碼中調用它,如下所示:

//Create the controls object
var controls = new THREE.OrbitControls( this.camera, this.renderer.domElement);
//get the camera position whenever you want
var cameraPosition = controls.getPos();

這是對2015年問題的2019年答案:

camera.position是相機的本地位置。 您可以通過camera.getWorldPosition()檢索全局位置。

順便說一句,您不必使用相機移動天空盒。 而是使用立方體紋理(或渲染立方體)作為scene.background。

暫無
暫無

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

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