为了账号安全,请及时绑定邮箱和手机立即绑定

ThreeJS中带反射的水

ThreeJS中带反射的水

九州编程 2021-06-16 15:10:08
ThreeJS 中的“海洋”示例非常好,因为太阳反射在水面上,看起来很逼真。我正在尝试复制这个,但我仍然需要理解代码的一部分。海洋示例构造了一个 Water 对象和一个 Sky 对象。然后,它构造一个 CubeCamera 并使用这个相机的渲染目标作为场景的背景。至此,一目了然。代码看起来像这样,其中隐藏了很多细节(由我):scene = new Scene();water = new Water();sky = new Sky();scene.add( water );cubeCamera = new CubeCamera();scene.background = cubeCamera.renderTarget;cubeCamera.update( renderer, sky );除了最后一行,我可以理解所有内容: cubeCamera.update( renderer, sky );在 ThreeJS docs 中,它说 CubeCamera.update() 的最后一个参数必须是场景,而不是天空。我完全不明白为什么这个示例有效,因为 Sky 的方法与 Scene 的方法不同。然而,这行代码似乎真的很重要,因为当我删除它时,就没有太阳了。有人可以启发我并告诉我它为什么有效吗?
查看完整描述

2 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

在 Three.js 中,场景只是Object3D. 它的不同之处仅在于它可以接受 a.background和一个.fog参数并相应地处理它。

一个空中包厢对象未在three.js所核心实现。它是一个示例特定的实现,可以作为用户参考。如果你看一下实现,它只不过是一个Mesh带有一个BoxGeometry和一个自定义着色器的材质。反过来,这也是一个Object3D.

尽管文档说明了什么,您不需要cubeCamera在 .js上渲染场景,就像在任何 Three.js 项目中都不需要场景一样。一切都可以用一个Object3D(您可能会遇到一些麻烦,但大多数情况下都是如此)

最后,这一切都取决于您要达到的目的。在本例中,cubeCamera用于模拟天空盒,它独立于场景中的内容。

常见的用途是为场景中的对象创建环境贴图。在这种情况下,使用实际场景来创建地图是有意义的。检查此示例背面的反射球。


查看完整回答
反对 回复 2021-06-18
  • 2 回答
  • 0 关注
  • 576 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信