【问题标题】:How to remain the original color after csg operations (using ThreeCSG.js)csg操作后如何保持原色(使用ThreeCSG.js)
【发布时间】:2013-08-13 07:20:50
【问题描述】:

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

比如A减B之后,我希望mesh保留A的材质,有点类似于csg.js website显示的image(a.subtract(b))。不同的是我希望它都是红色的(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。

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

谢谢大家。

【问题讨论】:

    标签: javascript three.js csg


    【解决方案1】:

    正确设置材料索引。

    如何:

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

    将 result.geometry.faces 循环为 searchFace

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

    如果找到则将人脸的materialindex添加到searchFace

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

    如果找到则将人脸的materialindex添加到searchFace

    如果没有找到,在geometry.faces中搜索一个与searchFace有1个相同顶点的面

    如果找到则将人脸的materialindex添加到searchFace

    如果没有找到添加立方体材质的材质索引

    【讨论】:

    • 感谢您的建议。它在大多数情况下都非常有效。但是,横截面中的那些面无法显示原始颜色。例如,the face in red 没有与立方体的面相同的顶点。还有其他方法可以解决这个问题吗?我想到的想法是使用边缘来做出判断。如果可行,我会与你分享。
    • 我尝试将面坐标与原始坐标进行核对,并将每个面的材质索引设置为原始值。但它对我不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-03
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 2016-09-10
    • 1970-01-01
    • 2010-10-23
    相关资源
    最近更新 更多