在BabylonJs中,如果相机被放置在离物体一定的距离,那么它的距离与物体的大小成正比,整个场景应该大致相同。
我创建了这个简单的测试(可以复制并粘贴到http://www.babylonjs-playground.com/中运行),它生成一个大小为1,000的球体的场景,从(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),场景看起来是空的。为什么?有可能改变这种行为吗?多么?我遗漏了什么?
谢谢!
发布于 2016-04-16 01:10:20
这很可能与相机的“剪裁平面”有关。在3D图形中,通常会限制相机可以“观察”的距离(沿着z轴),这样它就不必在背景中“绘制”太远的对象。
通过将以下内容添加到代码中,可以更改此值以延长相机的绘制距离:
camera.maxZ = 100000;
要可视化这一点,还可以在球体下面添加一个平面几何体。然后,可以将maxZ属性设置为不同的值,并查看它在何处停止绘制平面。
https://stackoverflow.com/questions/36640916
复制相似问题