2013-11-01 53 views
8

如何创建反映场景中其他形状的材质?我尝试过reflectivity属性,但它没有反映任何内容。THREE.js中的反光材料

有似乎有这种效果的例子:http://threejs.org/examples/#webgl_shading_physical

它看起来并不像标准的材料被用来创建此。

+0

这方面有许多,许多例子:http://threejs.org/examples/#webgl_materials_cars_camaro,HTTP:/ /threejs.org/examples/#webgl_materials_cubemap,http://threejs.org/examples/#webgl_materials_cubemap_balls_reflection – WestLangley

+2

如果你想要一个镜像,也有一个例子:http://threejs.org/examples/#webgl_mirror – WestLangley

+0

@WestLangley除镜像以外的所有示例都使用环境图像进行反射。如果仔细观察材料,您会看到使用的图像。我特意询问了如何反映场景中的其他物体。镜子的例子是很好的参考,谢谢。 – MCSharp

回答

4

想进入一点理论:反射基本上是从某个位置拍摄的场景图像。所以如果你想要一个平面网格作为一面镜子,你必须在该位置添加一个相机,让它在场景中渲染动画循环中的纹理,然后在平面网格的材质中使用该纹理。除了WestLangley提到的例子之外,我还建议您查看http://stemkoski.github.io/Three.js/Reflection.html

另外,玩弄设置;一少的反光效果,例如,尝试:

var mirrorMaterial = new THREE.MeshBasicMaterial({ color: 0x111111, envMap: mirrorCamera.renderTarget }); 

var mirrorMaterial = new THREE.MeshPhongMaterial({ emissive: 0x111111, envMap: mirrorCamera.renderTarget }); 
+1

谢谢你的回答。我正在寻找地板物体的反光材料。反射率必须来自场景中的物体。我没有看到任何期望效果的检查。像有光泽的塑料或金属。反射会在那里有点扩散,不像镜子的例子。虽然镜子的例子是我见过的最接近的例子。你能否提供一些代码让我开始? – MCSharp

+0

尝试更改具有反射的对象的材质参数,这会使其反射更少,并可能使其具有更多所需的效果。查看上面更新的答案。 –

+0

谢谢。我认为这是一个很好的起点。 – MCSharp