我有一个基于tileset的项目,我目前通过许多ShaderMaterials将其映射到CubeGeometries。three.js将几何体与ShaderMaterials合并
当渲染立方体时,立方体边缘会出现流血和闪烁现象。另外,它在性能方面似乎是一种非常糟糕的方式。
所以我抬头THREE.GeometryUtils.merge,显然我的合并对立方体一个几何,顶点和所有。
是否可以使合并网格保留每个立方体上使用的材料? 有没有更好的方法来完成我想要做的事情?
编辑: 这是一个什么不工作的例子。
var shaderMat1 = new THREE.ShaderMaterial({
fragmentShader: document.getElementById("red-fragment").innerText,
vertexShader: document.getElementById("vertex").innerText
});
var shaderMat2 = new THREE.ShaderMaterial({
fragmentShader: document.getElementById("blue-fragment").innerText,
vertexShader: document.getElementById("vertex").innerText
});
var cube1 = new THREE.Mesh(new THREE.CubeGeometry(64, 64, 64), new THREE.MeshFaceMaterial([shaderMat1, shaderMat1, shaderMat1, shaderMat1, shaderMat1, shaderMat1]));
cube1.position.x = 0;
cube1.position.y = 300;
var cube2 = new THREE.Mesh(new THREE.CubeGeometry(64, 64, 64), new THREE.MeshFaceMaterial([shaderMat2, shaderMat2, shaderMat2, shaderMat2, shaderMat2, shaderMat2]));
cube2.position.x = 64;
cube2.position.y = 300;
var geo = new THREE.Geometry();
THREE.GeometryUtils.merge(geo, cube1);
THREE.GeometryUtils.merge(geo, cube2);
var mergedMesh = new THREE.Mesh(geo, new THREE.MeshFaceMaterial());
scene.add(mergedMesh);
它给出了一个错误的说法,“遗漏的类型错误:无法读取的未定义的属性‘地图’”,试图利用MeshFaceMaterial作为一对夫妇的网络上的地方使用时。
虽然我找不到我想念的东西。
EDIT2: 一个解决办法,我发现是通过新的几何形状的所有面圈,并呼吁geometry.mergeVertices前进行materialIndex它()。
什么版本的库您使用的是? – WestLangley
我正在使用rev53 – lindell
小提琴是r50。请参阅https://github.com/mrdoob/three.js/wiki/Migration。材料不再是几何体的一部分。查看几何合并源代码,并在出现错误时报告错误。我不确定此时适当的行为应该是什么。 – WestLangley