2013-06-29 55 views
2

我试图制作一个3D六角形网格,我想实施一场战争迷雾。忽略Three.js中的光源

这里是什么样的电网看起来像此刻的样本:

three.js hex grid

我已经照明设置如下:

// hemisphere light 
var hemisphereLight = new THREE.HemisphereLight(0xffffff, 0.3); 
scene.add(hemisphereLight); 

// point light 
var pointLight = new THREE.PointLight(0xffffff, 0.7); 
pointLight.position = camera.position; 
pointLight.rotation.y = Math.PI/2; 
scene.add(pointLight); 

我试图做的是使在战争迷雾中的瓦片不响应pointLight,这样他们只有低强度hemisphereLight。我似乎无法找到办法做到这一点。我不能更改瓷砖使用MeshBasicMaterial,它不响应任何灯光,因为我想让“战争之雾”瓷砖具有来自hemisphereLight的照明。

对于实施不同的战争迷雾的建议,我很乐意接受。

UPDATE:

我能够得到它使用自定义着色器来工作。

Finished fog of war

回答

3

尼斯的概念,恕我直言。

真的,你唯一的选择是创建自己的ShaderMaterial的瓷砖“战争迷雾”。在着色器中,您会忽略所有不是HemisphereLights的灯。

请记住,如果您要使用ShaderMaterial,并且您希望能够访问场景灯,则需要设置材料参数lights: true。这里有很多three.js的例子。

three.js r.58

+0

你有一个可以帮助我的例子的链接吗?我没有使用过“ShaderMaterial”,我无法找到帮助我的例子。 –

+1

着色器的简单示例,但未访问three.js灯光:http://jsfiddle.net/XGWGn/。为了你的目的,这可能是好的 - 你可以在着色器中自己的假光中进行破解。 Unfortunatley,访问场景灯的three.js例子要复杂得多,而且你只需要付出很多努力去理解它们。 – WestLangley

+0

我终于能够得到它的工作,感谢您的帮助! http://i.imgur.com/qwNtzHo.jpg –