2013-11-01 50 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