2016-04-15 162 views
0

在BabylonJs中,如果攝像機與物體保持一定的距離,使其距離與物體的大小成正比,則整個場景應該大致相同。BabylonJs目標物體消失

我創建這個簡單的測試(可以被複制並粘貼到http://www.babylonjs-playground.com/要運行),即產生一個場景大小1000的球,從位於(0,0,10000)的相機看到:

var createScene = function() { 

    // This creates a basic Babylon Scene object (non-mesh) 
    var scene = new BABYLON.Scene(engine); 

    // This creates and positions a free camera (non-mesh) 
    var camera = new BABYLON.FreeCamera("camera", new BABYLON.Vector3(0, 0, 10000), scene); 

    // This targets the camera to scene origin 
    camera.setTarget(BABYLON.Vector3.Zero()); 

    // This attaches the camera to the canvas 
    camera.attachControl(canvas, true); 

    // This creates a light, aiming 0,1,0 - to the sky (non-mesh) 
    var light = new BABYLON.HemisphericLight("light1", new BABYLON.Vector3(1, -1, -1), scene); 

    // Default intensity is 1. Let's dim the light a small amount 
    light.intensity = 0.7; 

    // Our built-in 'sphere' shape. Params: name, subdivs, size, scene 
    var sphere = BABYLON.Mesh.CreateSphere("Sphere", 16, 1000, scene); 

    return scene; 
}; 

請注意,如果球體的尺寸減小到100,並且相機的距離相應減小(因此相機位於(0,0,1000)),則場景看起來仍然相同。

如果實驗重複減少另一個因素,即球體的大小減少到10,相機定位到(0,0,100),仍然沒有任何變化。

到目前爲止,這麼好。但是,如果我嘗試增加球體的大小和距離,那麼一切都消失了:如果球體的大小是10000並且相機定位到(0,0,100000),則場景看起來是空的。爲什麼?有沒有可能改變這種行爲?怎麼樣?我錯過了什麼?

謝謝!

回答

1

這很可能與相機的「裁剪平面」有關。在3D圖形中,通常限制攝像機可以「看」到距離(沿着它的z軸)的距離,以便它不必在背景中「畫」遠處的物體。

您可以更改此值,加入給你的代碼來擴展相機的抽獎距離:

camera.maxZ = 100000;

爲直觀起見,你還可以添加一個平面幾何球體下方。然後,您可以將maxZ屬性設置爲不同的值並查看停止繪製飛機的位置。