0

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

我们THREE.MeshFaceMaterial在很多地方都使用过,根据BufferGeometry faces 材料 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 导出器,例如导出具有多种材料的缓冲几何。

4

1 回答 1

2

bufferGeometry.fromGeometry()在 r68 中处理 uvs 时存在错误。

试试这个解决方法:

bufferGeometry.attributes.uv = bufferGeometry.attributes.uvs;
于 2014-09-01T21:58:14.350 回答