2016-04-15 8 views
0

Wenn eine Kamera in BabylonJs in einer bestimmten Entfernung von einem Objekt positioniert ist, so dass ihre Entfernung proportional zur Objektgröße ist, sollte die Gesamtszene in etwa gleich sein.BabylonJs Zielobjekt verschwindet

I erstellt diesen einfachen Test (kann in http://www.babylonjs-playground.com/ kopiert und eingefügt werden, ausgeführt werden soll), die eine Szene mit einem Bereich der Größe erzeugt 1000 von einer Kamera bei (0, 0, 10000) positioniert gesehen:

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; 
}; 

Beachten Sie, dass, wenn die Größe der Kugel auf 100 reduziert und der Abstand der Kamera entsprechend reduziert wird (die Kamera also auf (0, 0, 1000) positioniert ist), die Szene immer noch gleich aussieht.

Wird das Experiment wiederholt um einen weiteren Faktor reduziert, dh die Größe der Kugel auf 10 reduziert und die Kamera auf (0, 0, 100) positioniert, ändert sich nichts.

So weit, so gut. Aber wenn ich versuche, die Größe der Kugel und die Entfernung zu vergrößern, dann verschwindet alles: Wenn die Größe der Kugel 10000 ist und die Kamera auf (0, 0, 100000) positioniert ist, sieht die Szene leer aus. Warum? Ist es möglich, dieses Verhalten zu ändern? Wie? Was vermisse ich?

Danke!

Antwort

1

Dies hängt wahrscheinlich mit der "Clipping-Ebene" der Kamera zusammen. In 3D-Grafiken ist es üblich, die Entfernung zu begrenzen, die eine Kamera in die Entfernung (entlang ihrer z-Achse) "schauen" kann, so dass sie keine Objekte weit im Hintergrund "zeichnen" muss.

Sie können diesen Wert ändern, um die Zugab Ihrer Kamera zu erweitern, indem Sie diese an Ihren Code:

camera.maxZ = 100000;

Um dies zu visualisieren, können Sie auch eine ebene Geometrie unterhalb der Kugel hinzufügen könnten. Sie könnten dann das Attribut maxZ auf verschiedene Werte setzen und sehen, wo es aufhört, die Ebene zu zeichnen.