簡體   English   中英

在Three.js中使用軌道控制旋轉相機時發生奇怪的晃動

[英]Strange shaking while rotating the camera with Orbit Controls in Three.js

我正在制作太陽系的模型。 這是我目前的指標:

scale = 0.001;
// 1 unit - 1 kilometer
var AU = 149597871 * scale;

這就是我定義相機,渲染器和控件的方式:

camera = new THREE.PerspectiveCamera(70, window.innerWidth / window.innerHeight, 0.1 * scale, 0.1 * AU);
renderer = new THREE.WebGLRenderer({ alpha: true, antialias: true });
controls = new THREE.OrbitControls(camera, renderer.domElement);

然后,我為用戶提供了在對象之間跳轉的選項,因此這是在用戶選擇行星/月球之后設置攝像機的方式:

function cameraGoTo() {
    for (var i = scene.children.length - 1; i >= 0 ; i--) {
        var obj = scene.children[i];
        if (obj.name == parameters.selected) {
            controls.target = obj.position;
            camera.position.copy(obj.position);
            camera.position.y += obj.radius * 2;
        }
    }
}

問題在於 ,對於小行星/月球(半徑<= 1000 km),相機在圍繞物體旋轉時會抖動。 我只有計算機圖形學的基本知識,所以我不知道這是Orbit Controls的問題,還是它與渲染器本身有關……所以我嘗試將logarithmicDepthBuffer = true設置logarithmicDepthBuffer = true但沒有幫助。 嘗試不同的scale也沒有任何改變。

在此先感謝您的幫助/提示。

編輯:

這是小提琴: http : //jsfiddle.net/twxyz/8kxcdkjj/

您可以看到以下任何一種情況都會增加抖動:

  • 對象越小
  • 物體離原點越遠,

這是什么原因? 顯然,這似乎與相機的近/遠光譜值無關,但與物體離場景中心的距離有關。

我已經提出了解決方案。

我的問題是處理遠離原點的對象時出現浮點精度錯誤。 事實證明這是一個眾所周知的問題,並且有各種解決方案。 我已經使用了這個:

http://answers.unity3d.com/questions/54739/any-solution-for-extreamly-large-gameworlds-single.html

發生的事情基本上是代替移動相機/播放器,而是相對於始終位於原點的相機/播放器變換整個場景 在這種情況下,Orbit Controls的目標始終是原點。

暫無
暫無

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

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