我有2个几何和2个网格。主要目标有时排除第一个几何体的一部分(因此我需要2个组)并在此时显示第二个几何体的一部分(总是1个组)。在发布r72之前,我使用了这段代码
第一个几何:
bufCompaniesGeomNotActive.addDrawCall(0, geomCompaniesNotActive.faces.length * 3, 0);
bufCompaniesGeomNotActive.addDrawCall(0, 0, 0);
第二个几何
bufCompaniesGeomActive.addDrawCall(0, 0, 0);
在r72版本中,addDrawCall刚刚重命名为addGroup。 但主要问题是第一几何中的2组。
之前,我正在尝试制作可见部分 floor.companiesGeomNotActive.groups[0].start = 0;
floor.companiesGeomNotActive.groups[0].count = obj.startFaceIndexNotActive * 3;
floor.companiesGeomNotActive.groups[1].start = obj.endFaceIndexNotActive * 3;
floor.companiesGeomNotActive.groups[1].count = lengthNotActive - obj.endFaceIndexNotActive * 3;
但没有成功。
我找到了方法companiesGeomActive.setDrawRange(obj.startFaceIndexActive * 3, 3 * (obj.endFaceIndexActive - obj.startFaceIndexActive));
并且它可以工作,但我如何为许多组设置范围?
答案 0 :(得分:2)
InputValue
现在用于支持BufferGeometry.groups
(以前称为MeshFaceMaterial)。
MultiMaterial
如果你有一个材质,想要渲染面的子组,你可以使用这样的模式:
geometry.clearGroups();
geometry.addGroup( start1, count1, 0 ); // materialIndex 0
geometry.addGroup( start2, count2, 1 ); // materialIndex 1
var material = new THREE.MultiMaterial( materialsArray );
var mesh = new THREE.Mesh( geometry, material );
当材料为geometry.clearGroups();
geometry.addGroup( start1, count1, 0 ); // zero
geometry.addGroup( start2, count2, 0 ); // zero
var materialsArray = [ material ];
var material = new THREE.MultiMaterial( materialsArray );
var mesh = new THREE.Mesh( geometry, material );
时, geometry.drawRange
将被忽略。
three.js r.72