在html中,我使用JSONLoader加载我的obj(从Blender 2.66导出的.js文件)。加载我的obj后,我使用ThreeCSG减去一个立方体。我想要实现的效果就像横截面。现在csg操作正常。问题是在csg操作后我无法保持原始颜色。
例如,在A减去B之后,我希望网格仍然是A的材质,有点类似于图像(a.subtract(b))csg.js website所示。不同的是我希望它全是红色(A的材料)。然而,它可能更复杂,因为我的obj有几种颜色和更复杂的几何形状。
这是我的代码的一部分。
的
的loader.load( "obj/blenderscene/FinFET2.4.js", createScene1 );
function createScene1( geometry, materials ) {
mesh = new THREE.Mesh( geometry, new THREE.MeshFaceMaterial( materials ) );
var mesh_bsp = new ThreeBSP(mesh);
var cube_geometry = new THREE.CubeGeometry( 2.5,7 , 7 );
cube_geometry = new THREE.Mesh( cube_geometry ,new THREE.MeshLambertMaterial( { color: 0xff11ff, opacity: 0.9, shading: THREE.FlatShading, wireframe: true, wireframeLinewidth: 2, transparent: true } ) );
var cube_bsp = new ThreeBSP( cube_geometry );
var subtract_bsp = mesh_bsp.subtract( cube_bsp );
var result = subtract_bsp.toMesh( new THREE.MeshFaceMaterial(materials) );
result.geometry.computeVertexNormals();
scene.add( result );
}
的
three.js的版本是R55。
抱歉我的英语不好。我真的需要一些帮助。希望你明白我的意思。
谢谢大家。
答案 0 :(得分:1)
正确设置材质索引。
如何:
将立方体材质添加到材质
将result.geometry.faces循环为searchFace
在geometry.faces中搜索与searchFace具有相同顶点的面
如果找到,则将面部的materialindex添加到searchFace
如果找不到,请在geometry.faces中搜索与searchFace相同的2个顶点的面
如果找到,则将面部的materialindex添加到searchFace
如果找不到,则在geometry.faces中搜索与searchFace具有相同顶点的1个面
如果找到,则将面部的materialindex添加到searchFace
如果未找到,请添加立方体材质的材质索引