2014-11-06 353 views
1

我試圖在Three.js中爲不同的頂點使用不同的顏色繪製一條線,使用THREE.LineTHREE.LineBasicMaterialvertexColors設置爲THREE.VertexColors。我寧願在相鄰頂點的顏色之間沒有插值(例如,顏色在兩個頂點之間的中間點處不連續地變化)。THREE.Line中的頂點顏色

我想對材料設置shading: THREE.FlatShading,但現在我意識到,這不是一個選項,LineBasicMaterialhttp://jsfiddle.net/214huf0a/

是否有一個內置的(或易)的方式來防止點之間的顏色的平滑上線在Three.js中,還是我需要編寫自己的着色器?

回答

7

通過使用THREE.LineSegments和設置vertexColors = THREE.VertexColors,您可以在three.js中爲每個段創建一行顏色的行;

for (var i = 0; i < geometry.vertices.length; i+=2) { 
    geometry.colors[ i ] = new THREE.Color(Math.random(), Math.random(), Math.random()); 
    geometry.colors[ i + 1 ] = geometry.colors[ i ]; 
} 

var material = new THREE.LineBasicMaterial({ 
    color: 0xffffff, 
    vertexColors: THREE.VertexColors 
}); 

var line = new THREE.LineSegments(geometry, material); 

three.js所r.85

+0

正是我一直在尋找。我們的好奇心是與THREE.LinePieces不同的行爲,這是Three.js用於呈現'LineBasicMaterial'的特定着色器的結果,或者將模式設置爲'THREE.LinePieces'的事實會觸發' GL_LINES'而不是'GL_LINE_STRIP'? – caseygrun 2014-11-07 01:56:56

+0

第二個。 – WestLangley 2014-11-07 02:24:33