Merge three.js将几何体与着色器材质合并

Merge three.js将几何体与着色器材质合并,merge,geometry,three.js,Merge,Geometry,Three.js,我有一个基于tileset的项目,目前我通过一些着色器材质将其映射到CubeGeometrics 渲染立方体时,立方体边缘周围会出现出血和闪烁。而且,就性能而言,这似乎是一种非常糟糕的方法 所以我查找了三个.GeometryUtils.merge,它显然将我的立方体合并为一个几何体、顶点和所有 是否可以使合并的网格保留我在每个立方体上使用的材质? 有没有更好的方法来完成我想做的事情 编辑: 这是一个不起作用的例子 当尝试使用web上几个地方使用的MeshFaceMaterial时,会出现一个错

我有一个基于tileset的项目,目前我通过一些着色器材质将其映射到CubeGeometrics

渲染立方体时,立方体边缘周围会出现出血和闪烁。而且,就性能而言,这似乎是一种非常糟糕的方法

所以我查找了三个.GeometryUtils.merge,它显然将我的立方体合并为一个几何体、顶点和所有

是否可以使合并的网格保留我在每个立方体上使用的材质? 有没有更好的方法来完成我想做的事情

编辑: 这是一个不起作用的例子

当尝试使用web上几个地方使用的MeshFaceMaterial时,会出现一个错误,即“UncaughtTypeError:无法读取未定义的属性'map'

我不知道我错过了什么

Edit2:
我发现的一个解决方法是循环遍历新几何体的所有面,并在调用geometry.mergeVertices()之前对其应用materialIndex。

感谢这篇文章,这些注释有助于找到解决方案。不应将材质数组提供给几何体,而应将其作为MeshFaceMaterial的唯一参数提供

CoffeeScript中的示例:

materials = []
for i in [0...6]
    texture = window["texture_" + i] # This is a Texture that has already been loaded
    materials.push new THREE.MeshBasicMaterial(
        color   : color
        map     : texture
    )
size = 1
geometry = new THREE.CubeGeometry size, size, size
cube = new THREE.Mesh geometry, new THREE.MeshFaceMaterial materials
cube.position.x = x
cube.position.y = y
cube.position.z = z  
scene.add cube  
return cube  

你用的是什么版本的库?小提琴是r50。看见材质不再是几何体的一部分。请查看几何体合并源代码,如果您认为存在错误,请报告错误。我不确定在这一点上正确的行为应该是什么。嗯,这可能不是一个bug,而是一个功能的删除。将寻找另一种方法来做这件事。
materials = []
for i in [0...6]
    texture = window["texture_" + i] # This is a Texture that has already been loaded
    materials.push new THREE.MeshBasicMaterial(
        color   : color
        map     : texture
    )
size = 1
geometry = new THREE.CubeGeometry size, size, size
cube = new THREE.Mesh geometry, new THREE.MeshFaceMaterial materials
cube.position.x = x
cube.position.y = y
cube.position.z = z  
scene.add cube  
return cube