在BabylonJs中,如果相机与物体保持一定距离,使其距离与物体的大小成比例,则整个场景应大致相同。
我创建了这个简单的测试(可以复制并粘贴到要运行的http://www.babylonjs-playground.com/中),从位于(0,0,10000)的相机看到一个大小为1000的球体的场景:
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),则场景看起来是空的。为什么?是否有可能改变这种行为?怎么样?我错过了什么?
谢谢!
答案 0 :(得分:1)
这很可能与相机的“剪裁平面”有关。在3D图形中,通常会限制相机可以“看到”距离(沿着z轴)的距离,这样它就不必在背景中“绘制”远处的物体。
您可以通过将此值添加到代码来更改此值以延长相机的绘制距离:
camera.maxZ = 100000;
要使其可视化,您还可以在球体下方添加平面几何体。然后,您可以将maxZ
属性设置为不同的值,并查看它停止绘制平面的位置。