有没有人熟悉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和材料之间的区别是什么? 在我之前的经历中,我总是使用材料来制作网格, 但这是我第一次注意到每个顶点都有一个颜色属性。 如果同时应用了顶点颜色和具有不同颜色设置的材质,那么会发生什么呢?
谢谢!
答案 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就可以了。