【问题标题】:BufferGeometry MeshFaceMaterial implementation r68BufferGeometry MeshFaceMaterial 实现 r68
【发布时间】:2014-10-25 20:54:26
【问题描述】:

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

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

【问题讨论】:

    标签: javascript three.js buffer-geometry


    【解决方案1】:

    bufferGeometry.fromGeometry() 在处理 r68 中的 uvs 时有一个错误。

    试试这个解决方法:

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

    【讨论】:

    • 不幸的是,这并没有真正帮助。如果我将不同的网格(不同的位置)分开,我可以看到每个网格都有自己的材质,但是当组合在一起时,只有一个是可见的。我尝试首先使用地图创建网格,就像这里建议的 github.com/mrdoob/three.js/issues/4751 一样,但这也没有帮助。有多种材质的 BufferGeometry 的工作示例吗?或者你能指出我的 uv 问题吗?
    • 我刚刚意识到材质会应用于整个几何体,所以如果我有一个带有纹理的材质,它看起来会很有趣。我想我必须分割我的几何体,这使得这变得更加困难^^
    猜你喜欢
    • 2014-12-26
    • 2014-11-02
    • 2018-01-31
    • 2016-02-18
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 2015-05-21
    • 1970-01-01
    相关资源
    最近更新 更多