BufferGeometry:如何渲染面组

时间:2015-09-28 09:11:23

标签: javascript three.js

我有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));并且它可以工作,但我如何为许多组设置范围?

1 个答案:

答案 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