绘制BufferGeometry线时,我设置索引如下:
indices = [1,2,2,3,3,4]
和颜色如:colors = [r1,g1,b1,r1,g1,b1, r2,g2,b2,r2,g2,b2, r3,g3,b3,r3,g3]
。然而,颜色不会粘在细分上,超越它们,最终与下一种颜色混合。我注意到的是它不能绘制所有颜色,只绘制第一个颜色,就像它是着色段和每个颜色的一半。
我创造了一个小提琴:http://jsfiddle.net/0f1oxdjx/
var positions = new Float32Array( MAX_POINTS * 3 ); // 3 vertices per point
var colors = new Float32Array(2*(MAX_POINTS-1)*3);
var indices = new Uint16Array(2*(MAX_POINTS-1));
var x = y = z = index = 0;
for ( var i = 0, l = MAX_POINTS; i < l; i ++ ) {
positions[ index ++ ] = x;
positions[ index ++ ] = y;
positions[ index ++ ] = z;
x += ( Math.random() - 0.5 ) * 300;
y += ( Math.random() - 0.5 ) * 300;
z += ( Math.random() - 0.5 ) * 300;
}
var iindex = 0, cindex = 0;
for ( var i = 1, l = MAX_POINTS; i < l; i ++ ) {
indices[iindex++] = i-1;
indices[iindex++] = i;
x = ( Math.random() );
y = ( Math.random() );
z = ( Math.random() );
colors[ cindex ++ ] = x;
colors[ cindex ++ ] = y;
colors[ cindex ++ ] = z;
colors[ cindex ++ ] = x;
colors[ cindex ++ ] = y;
colors[ cindex ++ ] = z;
}
geometry.addAttribute( 'position', new THREE.BufferAttribute( positions, 3 ));
geometry.addAttribute( 'color', new THREE.BufferAttribute( colors, 3 ) );
geometry.setIndex(new THREE.BufferAttribute( indices, 1 ));
// material
var material = new THREE.LineBasicMaterial({vertexColors:THREE.VertexColors, linewidth:2});
编辑小提琴。
答案 0 :(得分:0)
WestLangley指出,通过使用非索引几何,我能够解决问题。你可以在这里看到一个工作小提琴:
positions[ index ++ ] = x;
positions[ index ++ ] = y;
positions[ index ++ ] = z;
for ( var i = 1, l = MAX_POINTS-1; i < l; i ++ ) {
x += ( Math.random() - 0.5 ) * 300;
y += ( Math.random() - 0.5 ) * 300;
z += ( Math.random() - 0.5 ) * 300;
positions[ index ++ ] = x;
positions[ index ++ ] = y;
positions[ index ++ ] = z;
positions[ index ++ ] = x;
positions[ index ++ ] = y;
positions[ index ++ ] = z;
}
positions[ index ++ ] = x;
positions[ index ++ ] = y;
positions[ index ++ ] = z;
var iindex = 0, cindex = 0;
for ( var i = 1, l = MAX_POINTS; i < l; i ++ ) {
x = ( Math.random() );
y = ( Math.random() );
z = ( Math.random() );
colors[ cindex ++ ] = x;
colors[ cindex ++ ] = y;
colors[ cindex ++ ] = z;
colors[ cindex ++ ] = x;
colors[ cindex ++ ] = y;
colors[ cindex ++ ] = z;
}