BufferGeometry:如何渲染面组 [英] BufferGeometry: how to render groups of faces
问题描述
我有2个几何和2个网格。主要目标有时排除第一个几何体的一部分(因此我需要2个组)并在此时显示第二个几何体的一部分(总是1个组)。在发布r72之前我使用此代码
I have 2 geometries and 2 meshes. Main goal is sometimes exclude part of first geometry (so I need 2 groups for that) and show in this time part of 2nd geometry (always 1 group). Before release r72 I was use this code
第一几何:
bufCompaniesGeomNotActive.addDrawCall(0, geomCompaniesNotActive.faces.length * 3, 0);
bufCompaniesGeomNotActive.addDrawCall(0, 0, 0);
第二几何
bufCompaniesGeomActive.addDrawCall(0, 0, 0);
在r72版本中,addDrawCall刚刚重命名为addGroup。
但主要问题是第一几何中的2组。我之前尝试制作可见部分
In r72 release addDrawCall just renamed to addGroup. But main problem is 2 group's in 1st geometry. I was trying make visible part's like before
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));
并且它有效但是如何我可以为多个组设置范围吗?
but no success.
I've found method companiesGeomActive.setDrawRange(obj.startFaceIndexActive * 3, 3 * (obj.endFaceIndexActive - obj.startFaceIndexActive));
and it works but how can I set ranges for many groups?
推荐答案
BufferGeometry.groups
是现在用于支持 MultiMaterial
(以前称为MeshFaceMaterial)。
BufferGeometry.groups
is now used to support MultiMaterial
( formerly MeshFaceMaterial ).
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 );
如果你有一种材料并想要渲染面的子组,你可以使用一种模式像这样:
If you have a single material and want to render sub-groups of faces, you can use a pattern like so:
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
被忽略是 MultiMaterial
。
three.js r.72
three.js r.72
这篇关于BufferGeometry:如何渲染面组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!