当使用立方体相机时,通常会将材料的envMap设置为cubeCamera.renderTarget,例如:
var myMaterial = new THREE.MeshBasicMaterial({color:0xffffff,
envMap: myCubeCamera.renderTarget,
side: THREE.DoubleSide});
这对网格非常有用,因为这些网格是用来反射或折射立方体相机所看到的。但是,我想简单地创建一个纹理并将其应用到我的网格中。换句话说,我不希望我的对象反映或折射。我想把脸的正常值忽略掉。
我试过使用THREE.WebGLRenderTarget,但它不能处理立方体相机。显然,用一个带有WebGLRenderTarget的自检相机并不能给我提供360的纹理。
最后,简单地将cubeCamera.renderTarget分配给材料的“map”属性也不起作用。
能做我想做的事吗?
r73。
发布于 2016-01-04 07:48:45
答案是:将材料上的refractionRatio设置为1.0。然后,人脸法线被忽略,因为没有发生折射。
在一个正常的情况下,立方体相机是在同一场景中的网格,这将是没有意义的,因为网格将是无形的。但是在立方体相机正在看不同场景的情况下,这是一个有用的特性。
发布于 2015-12-31 04:38:00
编辑:这不是这个问题的作者想要的,我会把我的答案留给其他人
您的envmap已经是一个纹理,所以没有必要将它作为映射应用。此外,立方体地图和纹理在结构上是不同的,所以不可能交换它们,或者如果你成功地做到了这一点,结果可能不是你可能期望的那样。
我从您要求的内容中了解到,您希望在每个框架上更新一个静态envmap,如果是这样的话,就不要将myCubeCamera.updateCubeMap()
运行到您的呈现函数中。相反,把它放在你的场景初始化结束与你想要的立方体相机的位置,你的envmap将只显示该帧。
见下面的例子:
https://stackoverflow.com/questions/34537522
复制