0

BabylonJs では、カメラがオブジェクトから特定の距離に配置され、その距離がオブジェクトのサイズに比例する場合、シーン全体はほぼ同じになります。

( 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) に配置されている場合、シーンは空に見えます。なんで?この動作を変更することは可能ですか? どのように?私は何が欠けていますか?

ありがとう!

4

1 に答える 1

1

これは、カメラの「クリッピング プレーン」に関連している可能性が最も高いです。3D グラフィックスでは、カメラが遠方 (z 軸に沿って) を「見る」ことができる距離を制限するのが一般的です。これにより、オブジェクトを背景の遠くに「描画」する必要がなくなります。

これをコードに追加することで、この値を変更してカメラの描画距離を延長できます。

camera.maxZ = 100000;

これを視覚化するために、球の下に平面ジオメトリを追加することもできます。次に、maxZアトリビュートを別の値に設定して、平面の描画が停止する場所を確認できます。

于 2016-04-15T17:10:20.177 に答える