THREEJS关于多顶点坐标,非单一材质的处理方式
2020-03-02 本文已影响0人
aibinMr
其实学习webgl后不就我就有个疑问,当一个顶点数非常多,颜色却是由几个单色组成的模型,应该如何处理数据呢。无疑用索引或者数组的方式都会造成很多冗余的数据,这时如何处理呢,知道我看到下面threejs的做法时候我才恍然大悟,threejs先判断模型是否包含多个材质,如果包含多个材质就按照材质来拆分顶点索引,把每个材质拆分成小的模型对象逐一渲染,这样数据就不会过多重复冗余。下面时具体的代码,版本r114
//WebGLRenderer.js
if ( Array.isArray( material ) ) {
var groups = geometry.groups;
for ( var i = 0, l = groups.length; i < l; i ++ ) {
var group = groups[ i ];
var groupMaterial = material[ group.materialIndex ];
if ( groupMaterial && groupMaterial.visible ) {
currentRenderList.push( object, geometry, groupMaterial, groupOrder, _vector3.z, group );
}
}
} else if ( material.visible ) {
currentRenderList.push( object, geometry, material, groupOrder, _vector3.z, null );
}