我使用具有不同顶部和底部纹理的ExtrudeGeometry创建了形状。它正确渲染,没有洞的形状。如果我在形状中添加孔,则底部纹理与顶部混合。 我不知道我错过了什么或做错了什么。
如果有人能找到问题,这是我的代码。
我在代码末尾使用的循环是在形状的正面和背面设置不同的纹理。我从stackoverflow获得了参考资料。
this.group = new THREE.Group();
this.scene.add( this.group );
for(i=0; i < boardDrill.length; i++) {
boardShape.holes.push(boardDrill[i]);
}
var extrudeSettings = { amount: 1, bevelEnabled: false, material: 0, extrudeMaterial: 1};
var geometry = new THREE.ExtrudeGeometry( boardShape, extrudeSettings );
var textureLoader1 = new THREE.TextureLoader();
var topTexture = textureLoader1.load(this.boardData.topImage);
topTexture.repeat.set(1/boardWidth, 1/boardHeight);
var textureLoader2 = new THREE.TextureLoader();
var bottomTexture = textureLoader2.load(this.boardData.bottomImage);
bottomTexture.repeat.set(1/boardWidth, 1/boardHeight);
var frontMaterial = new THREE.MeshPhongMaterial({ map : topTexture});
var backMaterial = new THREE.MeshPhongMaterial({ map : bottomTexture });
var sideMaterial = new THREE.MeshPhongMaterial({ color: 0x00cc00 });
var materials = [frontMaterial, sideMaterial, sideMaterial, sideMaterial, sideMaterial, backMaterial];
var material = new THREE.MeshFaceMaterial( materials );
var mesh = new THREE.Mesh( geometry, material );
for ( var face in mesh.geometry.faces ) {
if (mesh.geometry.faces[ face ].normal.z == -1) {
mesh.geometry.faces[ face ].materialIndex = 5;
}
}
this.group.add( mesh );
答案 0 :(得分:0)
感谢Matey。正如他在评论中建议只改变normal.z&lt; -0.9解决了这个问题,为什么他已经提到了。
工作代码:
for ( var face in mesh.geometry.faces ) {
if (mesh.geometry.faces[ face ].normal.< -0.9) {
mesh.geometry.faces[ face ].materialIndex = 5;
}
}