BufferGeometry:如何渲染面组 [英] BufferGeometry: how to render groups of faces

查看:717
本文介绍了BufferGeometry:如何渲染面组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆