csg操作后如何保持原始颜色(使用ThreeCSG.js)

时间:2013-08-12 03:38:01

标签: javascript three.js csg

在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。

抱歉我的英语不好。我真的需要一些帮助。希望你明白我的意思。

谢谢大家。

1 个答案:

答案 0 :(得分:1)

正确设置材质索引。

如何:

将立方体材质添加到材质

将result.geometry.faces循环为searchFace

在geometry.faces中搜索与searchFace具有相同顶点的面

如果找到,则将面部的materialindex添加到searchFace

如果找不到,请在geometry.faces中搜索与searchFace相同的2个顶点的面

如果找到,则将面部的materialindex添加到searchFace

如果找不到

,则在geometry.faces中搜索与searchFace具有相同顶点的1个面

如果找到,则将面部的materialindex添加到searchFace

如果未找到,请添加立方体材质的材质索引