关于使用THREE.InstancedBufferGeometry的问题

时间:2015-11-06 19:16:32

标签: three.js

有没有人熟悉THREE.InstancedBufferGeometry?

我所拥有的模型数据只是顶点和面(三角形索引), 而相同的原子模型将应用于视图中的许多实例。 但是,由于文档的不足,我无法弄清楚如何做到这一点。

我猜/期待这样的事情:

var geo = new THREE.Geometry();
foreach(vertex) geo.vertices.push(vertex);
foreach(face) geo.faces.push(face);
geo.computeNormals();
var buffer = new THREE.BufferedGeometry().fromGeometry(geo);
geo.dispose();
var instances = new THREE.InstancedBufferGeometry();
copy buffer.positions to instances;
copy buffer.normals to instances;
copy buffer.index to instances;
copy buffer.colors to instances;
var offset = new THREE. InstancedBufferAttribute (...);
foreach(instance new location) offset.setXYZ(...);
instances.addAttribute('offset', offset);

var mat = new THREE.someMaterial (...);
var mesh = new THREE.Mesh(instances, mat);
scene.add(mesh);

会起作用吗?

无论如何,我还可以问几何.colors和材料之间的区别是什么? 在我之前的经历中,我总是使用材料来制作网格, 但这是我第一次注意到每个顶点都有一个颜色属性。 如果同时应用了顶点颜色和具有不同颜色设置的材质,那么会发生什么呢?

谢谢!

2 个答案:

答案 0 :(得分:2)

经过很长一段时间,我发现这个作品很有意思:

var geometry = new THREE.Geometry();
var geometry_array = [...];
geometry_array.forEach(function(geo)) {
   geometry.merge(geo);
}//next

var buf = new THREE.BufferedGeometry().fromGeometry(geometry);
geometry.dispose();
var mesh = new THREE.Mesh(buf, material);
scene.add(mesh);

答案 1 :(得分:0)

最后。只需复制多个BufferGeometry就可以了。