タイルセット上に構築されたプロジェクトがあり、現在、いくつかのShaderMaterialsを介してCubeGeometriesにマップしています。
立方体がレンダリングされると、立方体のエッジの周りににじみやちらつきがあります。また、パフォーマンスの面で、それを行うにはひどく悪い方法のようです。
そこで、キューブを1つのジオメトリ、頂点、およびすべてにマージするように見える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);
Web上のいくつかの場所で使用されているMeshFaceMaterialを使用しようとすると、「Uncaught TypeError:Undefinedのプロパティ'map'を読み取れません」というエラーが表示されます。
何が欠けているのかわかりません。
Edit2: 私が見つけた回避策の1つは、新しいジオメトリのすべての面をループし、geometry.mergeVertices()を呼び出す前にそれにmaterialIndexを適用することでした。