BufferGeometry MeshFaceMaterial实现r68

时间:2014-09-01 15:28:44

标签: javascript three.js buffer-geometry

我们最近切换到r68并将所有几何图形移动到THREE.BufferGeometry

我们在很多地方都使用THREE.MeshFaceMaterial,根据BufferGeometry faces materials THREE.BufferGeometry不支持它。解决方案似乎是创建多个网格,我尝试了这个,但它似乎不起作用,我没有得到任何错误。

我的方法如下:

var oldGeometry = ... // THREE.Geometry from our loader
var materials = ... // Material array from our loader, uses lightmaps, normalmaps etc.
var bufferGeometry = new THREE.BufferGeometry();
var geometry = bufferGeometry.fromGeometry(oldGeometry);

var group = new THREE.Object3D();

materials.forEach(function(material){
  group.add(new THREE.Mesh(geometry, material));
});

geometry.attributes.uv = geometry.attributes.uvs;

这样可以正常工作而没有错误,但是渲染时,所有的光照贴图等似乎都不起作用,几何图形看起来很好但只有一种颜色。

有关如何正确实施此问题的任何提示?

编辑:

紫外线问题:https://github.com/mrdoob/three.js/issues/5118

编辑2:

在深入研究WebGLRenderer源代码之后,我认为实现这个目标还有很多工作,那么它现在值得。我们现在会坚持旧几何,但我仍然愿意接受建议;)

编辑3: 您可以在此处找到自己执行此操作的基本方法:https://github.com/mrdoob/three.js/issues/5268

这里正在进行工作https://github.com/mrdoob/three.js/issues/5417以改进three.js导出器,例如使用多种材料导出缓冲区几何。

1 个答案:

答案 0 :(得分:2)

在处理r68中的uv时,bufferGeometry.fromGeometry()中存在错误。

尝试此解决方法:

bufferGeometry.attributes.uv = bufferGeometry.attributes.uvs;