Javascript Three.js中的摄影机参数
以下是摄影机的实例化方式:Javascript Three.js中的摄影机参数,javascript,3d,camera,three.js,Javascript,3d,Camera,Three.js,以下是摄影机的实例化方式: var camera = new THREE.PerspectiveCamera( VIEW_ANGLE, ASPECT, NEAR, FAR ); 这些值意味着什么?第一个参数是FOV表示视野,想象一下三脚架上的相机,如果将镜头更改为广角,则会获得更高的FOV。试着想象一个圆锥体从相机里出来,它只能看到那个区域的物体 纵横比是指纵横比,一台宽屏电视是16/9,旧的是4/3,通常只给它屏幕的宽度/高度或你想用three.js的DIV的
var camera = new THREE.PerspectiveCamera(
VIEW_ANGLE,
ASPECT,
NEAR,
FAR
);
这些值意味着什么?第一个参数是FOV表示视野,想象一下三脚架上的相机,如果将镜头更改为广角,则会获得更高的FOV。试着想象一个圆锥体从相机里出来,它只能看到那个区域的物体
纵横比是指纵横比,一台宽屏电视是16/9,旧的是4/3,通常只给它屏幕的宽度/高度或你想用three.js的DIV的昏暗度。我想知道同样的事情,所以我查了一下,它是一个视图“平台” 我将在这里粘贴我在最近一个项目中编写的代码注释,因为它很好地总结了IMHO
// "What the f*** is a frustum?" you ask. Well I did.
// Think about it as a truncated pyramid. The tip is the camera. From a certain
// point "down" the pyramid (the "near plane"), stuff can be seen on-screen.
// After the "base" of the pyramid (the "far plane"), stuff is too far to be
// seen. Stuff outside the pyramid is off-screen too. There is also the "aspect
// ratio" (the rectangle that makes up the pyramid's base, so this value is
// width/height) and the "field of view" (think of it as a lens or something,
// it distorts the pyramid so there's more objects on screen - it is set in
// degrees and 45° is more-or-less a "natural" perspective. The bigger the
// number, the more "perspective" there is).
我发现这对于理解所有相机参数以及和之间的差异非常有用
透视照相机
- Fov(视野)-这是可以从相机位置看到的场景的一部分。你可能知道,我们人类几乎有180度的视野,而有些鸟类甚至有360度的视野。然而,对于计算机,我们通常使用60到90度的视野
- 纵横比-纵横比是渲染输出区域的水平和垂直大小之间的比率。因为我们通常使用整个窗口,所以我们只使用这个比率。纵横比决定了水平视野和垂直视野之间的差异,如下图所示。普通值为
window.innerWidth/window.innerHeight
- Near-此属性定义与摄影机的最小距离
渲染场景。通常,这是一个非常小的值,例如0.1Three.js
- 远-此属性定义我们从摄影机位置看到场景的最大距离。如果我们将其设置得太低,场景的一部分可能无法渲染;如果将其设置得太高,在某些情况下,可能会影响渲染性能。正常值介于500和2000之间
- 左(摄影机截锥体左平面)-您应该将其视为将渲染的对象的左边界。如果我们将此值设置为-100,您将看不到离左侧更远的任何对象
- 右侧(摄影机视锥台右侧平面)-右侧更远的任何对象都不会被渲染
- 顶部(摄影机平截头体顶平面)-要渲染的最大顶部位置
- 底部(摄影机平截头体底部平面)要渲染的底部位置
- 近(摄影机平截头体近平面)-从这一点开始,基于摄影机的位置,场景将被渲染
- 远(摄影机平截体远平面)-基于摄影机位置的场景将渲染到的最远点
this.switchCamera = function(SCENE_WIDTH, SCENE_HEIGHT) {
if (camera instanceof THREE.PerspectiveCamera) {
camera = new THREE.OrthographicCamera( SCENE_WIDTH / - 2, SCENE_WIDTH / 2, SCENE_HEIGHT / 2, SCENE_HEIGHT / - 2, 0.1, 1000 );
camera.position.x = 0;
camera.position.y = 0;
camera.position.z = -1;
camera.lookAt(scene.position);
this.perspective = "Orthographic";
} else {
camera = new THREE.PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 0.1, 1000 );
camera.position.x = 0;
camera.position.y = 0;
camera.position.z = -1;
camera.lookAt(scene.position);
this.perspective = "Perspective";
}
};
注意事项:
- 功能
将摄影机定向到场景所在的位置,使其可见camera.lookAt(scene.position)
three.js中的单位是,因此
左、右、上、下的值不应假定为像素
- 相机平截头体的纵横比通常应与画布的纵横比匹配
场景宽度和场景高度可以通过添加到场景中的几何体来确定。正交平截头体可能比场景大很多,但也不会很节省李>
请参考我在您最近的问题上给出的答案——这是近剪裁平面和远剪裁平面——这很酷,现在,还有其他值吗?:)碰撞究竟什么是远近?我假设(zFAR)意味着它不会显示在屏幕上,但这只是一个假设。就装载速度而言,远的问题是可以理解的,但近的问题?剪辑问题lol?我想你需要阅读并更正你的帖子。(1)你正在将像素单位传递给你的
正交摄影机
构造器。单位应为世界单位。(2) 您的近剪裁平面位于相机后面,因为您为近
指定了负值。否,这是不正确的。我建议您更改它,以免误导用户。另外,三个.js r.76单元是任意的。它们不需要使用国际单位制。所有建议的更正现已合并!谢谢你的反馈。