2

タイルセット上に構築されたプロジェクトがあり、現在、いくつかのShaderMaterialsを介してCubeGeometriesにマップしています。

立方体がレンダリングされると、立方体のエッジの周りににじみやちらつきがあります。また、パフォーマンスの面で、それを行うにはひどく悪い方法のようです。

そこで、キューブを1つのジオメトリ、頂点、およびすべてにマージするように見えるTHREE.GeometryUtils.mergeを調べました。

マージされたメッシュに、各キューブで使用したマテリアルを保持させることはできますか?私がやろうとしていることを達成するためのより良い方法はありますか?

編集: これは機能していないものの例です。

http://jsfiddle.net/CpQ77/3/

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を適用することでした。

4

1 に答える 1

0

この投稿をありがとう、コメントは解決策を見つけるのに役立ちました。ジオメトリにマテリアル配列を提供する代わりに、それを 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  
于 2012-12-29T06:28:11.977 に答える