Three.js透视照相机';近';和';远';参数

Three.js透视照相机';近';和';远';参数,three.js,Three.js,我是three.js的绝对初学者(今天是探索的第一天),我对传递给透视相机的“近”和“远”参数的作用感到困惑 我之所以问这个问题,是因为我真的不明白为什么这些参数是有用的。唯一真正重要的是fov角度和纵横比,这似乎隐含地定义了视框(平截体),尽管不一定是平截体的深度。根据我们想要渲染的对象自动生成近距离和远距离参数(深度),而不是显式地设置它们,这不是更符合逻辑吗? 我问这个问题的原因是,当一个对象被放置在透视相机的“远”参数(对象的z轴)后面时,它似乎会下降(我很难理解为什么这样做是有意义的。

我是three.js的绝对初学者(今天是探索的第一天),我对传递给透视相机的“近”和“远”参数的作用感到困惑

我之所以问这个问题,是因为我真的不明白为什么这些参数是有用的。唯一真正重要的是fov角度和纵横比,这似乎隐含地定义了视框(平截体),尽管不一定是平截体的深度。根据我们想要渲染的对象自动生成近距离和远距离参数(深度),而不是显式地设置它们,这不是更符合逻辑吗?
我问这个问题的原因是,当一个对象被放置在透视相机的“远”参数(对象的z轴)后面时,它似乎会下降(我很难理解为什么这样做是有意义的。你不会想让一个对象落在z轴上,因为你在设置“far”参数时犯了一个错误,因为距离不够远。因为你在脚本开始时自己将far参数设置为某个常量值,这似乎有点问题

因此,我的问题是,根据什么标准确定远近参数应该是什么(而不仅仅是一些随机值,所有教程/书籍似乎都是这样做的)? 这可能是一个相当愚蠢的问题,因为从我读到的所有材料中可以明显看出,这些参数本来就应该被理解,因为我似乎找不到解释。(可能我经常会在这里提出无数此类愚蠢的问题,哈哈)。

多么“忙”是您的场景吗?Far将控制渲染期间将/不会剔除的内容。渲染的内容越多,所需时间越长。这适用于所有摄影机设置。您可以看到的越多,渲染的时间越长

你说

简单地说,您不希望让对象落在z轴上 因为您在设置'far'参数not far'时出错 够了

我说你想让它停下来,因为另一个更近的物体更重要,你不想把时间浪费在更远的物体上。如果你改变场景,决定“这个场景更稀疏,我可以承受更高的距离”,然后在那一点增加它

这并不是说这些值是任意的,更重要的是,只要你决定你愿意跑多快/多慢,它们都会被调整。如果你的目标是4K 60 FPS,你可能需要减少你的视野和距离。如果你只想要720 30 FPS,你可能能够渲染场景中的所有东西

教程无法为您决定这些设置,因为它们不知道您将渲染什么或您将在什么硬件上渲染

另一件事是,您的度量单位可能与其他实现非常不同。一个人的远近距离为0.1/1000,另一个人的远近距离为1/10000000

例如,我认为。这个数字可能看起来很随机,但可能被调整到了很好的位置,有很多浮点运算。如果你刚刚开始,你可能会在OpenGL场景中抛出一个立方体,然后将其设置为1x1x1维。坐在你旁边的立方体将不适合0.1/100的相机视图范围,但是那个不真实的角色不适合