Javascript 缓冲区几何体网格面材质实现r68
我们最近切换到r68,并将所有几何图形移动到Javascript 缓冲区几何体网格面材质实现r68,javascript,three.js,buffer-geometry,Javascript,Three.js,Buffer Geometry,我们最近切换到r68,并将所有几何图形移动到THREE.BufferGeometry 我们在很多地方使用了THREE.MeshFaceMaterial,根据THREE.BufferGeometry不支持它。解决方案似乎是创建多个网格,我尝试了这一点,但它似乎不工作,我没有得到任何错误 我的做法如下: var oldGeometry = ... // THREE.Geometry from our loader var materials = ... // Material array from
THREE.BufferGeometry
我们在很多地方使用了THREE.MeshFaceMaterial
,根据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;
这工作正常,没有错误,但渲染时,所有光照贴图等似乎都不工作,几何体看起来很好,但只有一种颜色
有没有关于如何正确实现这一点的提示
编辑:
紫外线问题:
编辑2:
在深入研究WebGLRenderer源代码之后,我认为实现这一点比现在值得做的工作多得多。现在我们将继续使用旧的几何图形,但我仍然愿意接受建议;)
编辑3:
您可以在此处找到自己完成此操作的基本方法:
此处正在进行改进three.js导出器的工作,例如导出具有多种材质的缓冲几何体。在处理r68中的UV时,
bufferGeometry.fromGeometry()
中存在错误
尝试以下解决方法:
bufferGeometry.attributes.uv = bufferGeometry.attributes.uvs;
不幸的是,这并没有真正起到帮助作用。如果我分离不同的网格(不同的位置),我可以看到每个网格都有自己的材质,但是当组合时,只有一个可见。我试着先用贴图创建网格,就像这里建议的那样,但也没用。有没有使用多种材质的BufferGeometry的工作示例,或者你能给我指出uv问题吗?我刚刚意识到材质会应用于整个几何体,因此如果我有一种带有纹理的材质,它看起来非常有趣。我想我必须分割我的几何体,这使得这很难^^