Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在csg操作后保持原始颜色(使用ThreeCSG.js)_Javascript_Three.js_Csg - Fatal编程技术网

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

Javascript 如何在csg操作后保持原始颜色(使用ThreeCSG.js),javascript,three.js,csg,Javascript,Three.js,Csg,在html中,我使用JSONLoader加载我的obj(.js文件从Blender 2.66导出)。加载obj后,我使用ThreeCSG减去一个立方体。我想要达到的效果就像横截面。现在csg运作正常。问题是csg手术后我不能保持原色 例如,在A减去B之后,我希望网格仍然是A的材质,与图像(A.subtract(B))显示的有些类似。不同的是我希望它都是红色的(A的材料)。但是,它可能更复杂,因为我的obj有多种颜色和更复杂的几何体 这是我代码的一部分 three.js的版本是R55 对不起,

在html中,我使用JSONLoader加载我的obj(.js文件从Blender 2.66导出)。加载obj后,我使用ThreeCSG减去一个立方体。我想要达到的效果就像横截面。现在csg运作正常。问题是csg手术后我不能保持原色

例如,在A减去B之后,我希望网格仍然是A的材质,与图像(A.subtract(B))显示的有些类似。不同的是我希望它都是红色的(A的材料)。但是,它可能更复杂,因为我的obj有多种颜色和更复杂的几何体

这是我代码的一部分

three.js的版本是R55

对不起,我的英语很差。我真的需要一些帮助。希望你能理解我的意思


谢谢大家。

正确设置材质索引

如何:

将立方体材质添加到材质中

将result.geometry.faces循环为searchFace

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

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

如果未找到,请搜索与geometry.faces中的searchFace具有两个相同顶点的面

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

如果未找到,请搜索与geometry.faces中的searchFace具有1个相同顶点的面

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


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

谢谢您的建议。它在大多数情况下都非常有效。但是,横截面中的这些面无法显示原始颜色。例如,没有与立方体的面相同的顶点。还有其他办法解决这个问题吗?我脑海中浮现的想法是利用边缘来做出判断。如果它有效,我将与您分享。我试图检查面坐标与原始坐标,并将每个面的材质索引设置为原始值。但这对我不起作用。
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 );
 }