2013-06-29 120 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 –