2013-06-18 134 views
0

對於材質,設置THREE.FlatShading似乎不適用於BufferGeometry。它是否實施?Three.js - 爲BufferGeometry實現的平面着色

我創建BufferGeometryCTMLoader (useBuffers = true)shading: THREE.FlatShading地應用MeshLambertMaterialMeshNormalMaterial。 Three.js仍將所有內容渲染爲SmoothShading。

如果我切換到ClassicGeometry(useBuffers = false),一切都按預期工作。不幸的是,這對我們來說不起作用,因爲我們的模型非常龐大,這正是使用BufferGeometry的原因。

它只是沒有執行或是非常困難/耗時/不可能實現?

非常感謝您提供任何提示或建議。我正在使用最新的r58版本。

P.S.

我發現最近Ryan Rix的帖子在同一主題http://rix.si/2013/04/15/threejs-ctm-and-you/,他不得不切換到ClassicGeometry使其工作。

+0

它沒有在r.58中實現。作爲一個實驗,在渲染之前,請嘗試調用'BufferGeometry.computeVertexNormals()'並查看它是否產生平面着色。這當然會覆蓋你現有的頂點法線。 – WestLangley

+0

@WestLangley,謝謝,我試過了 - 不起作用。同樣設置dynamic = true也沒有幫助。 – Simon

回答

0

In three.js r73平面着色肯定與THREE.MeshPhongMaterial一起工作。您可以這樣使用:

geometry = new THREE.BufferGeometry(); 

//... make your geometry 

material = new THREE.MeshPhongMaterial({ 
    color: 0xff0000, 
    shading: THREE.FlatShading 
}); 

mesh = new THREE.Mesh(geometry, material); 

這對THREE.MeshLambertMaterial還沒有效果。但他們正在努力。檢查相關問題here on GitHUB