2013-07-06 40 views
1

我有由幾個頂點和麪(網格)組成的Three.Geometry對象。我想動態更改所選臉部的顏色或材質。更改網格面的材質或顏色

geometry.colorsNeedUpdate = true; 
geometry.faces[1].color.setHex(0xcccccc); //this doesn't work 

上面的代碼,使新的顏色混濁怪異。它的行爲就像它不能代替顏色,但將新顏色與舊顏色混合在一起。因此用重寫覆蓋較深的顏色是不可能的。如何解決這個問題?我的材料同樣適用:

mat = new THREE.MeshBasicMaterial({color:"white",shading: THREE.FlatShading,side: THREE.DoubleSide,vertexColors: THREE.FaceColors, needsUpdate : true});

另一種方法我想做的事,也與改變參考其他材料:

geometry.faces[0].materialIndex = 1; // works only when disabled OpenGL in browser 

已經set material.needsUpdate flag to true 並檢查https://github.com/mrdoob/three.js/wiki/Updates

仍然沒有改變。

+0

您能否提供一個(簡單的)現場示例來演示您所看到的不尋常效果? – WestLangley

+0

OFC。這裏是JsFiddle代碼 - http://jsfiddle.net/VsWb9/1163/ – user2550696

+0

這裏是zip版本。它比JsFiddle更好的代碼。我不得不重寫一些東西,使它在JS小提琴中工作。 http://www.sendspace.com/file/ap1l4n – user2550696

回答

1

你正在混合蘋果和橘子。不要同時使用兩種顏色和MeshFaceMaterial

首先,在WebGLRenderer,你不能網已經呈現一次後改臉型materialIndex。但是,您可以更改材質數組中的其中一種材質。

您需要使用MeshBasicMaterial你的網狀材料,並指定vertexColors: THREE.FaceColors。這樣你可以控制每個臉部的顏色。請務必初始化每個臉部顏色,以獲得棋盤圖案。還要將材質顏色設置爲0xffffff,否則您會看到您試圖避免的乘法效應。

three.js r.58

+0

我修正了它。謝謝。你覺得它不符合我的想法。我需要更好地解釋多種材料如何工作。這樣的小問題花了我2天:]哈哈 – user2550696