1

HTML では、JSONLoader を使用して obj (Blender 2.66 からエクスポートした .js ファイル) を読み込みます。obj を読み込んだ後、ThreeCSG を使用して立方体を減算します。私が達成したい効果は、断面のようなものです。csg 操作が正常に機能するようになりました。問題は、csg 操作後に元の色を維持できないことです。

たとえば、A が B を差し引いた後、メッシュが A のマテリアルのままであることを願っています。違うのは全部赤でお願いします(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 です。

英語が下手で申し訳ありません。本当に助けが必要です。私の言いたいことを理解していただければ幸いです。

皆さん、ありがとうございました。

4

1 に答える 1

2

マテリアル インデックスを正しく設定してください。

方法:

キューブ マテリアルをマテリアルに追加する

result.geometry.faces を searchFace としてループします

geometry.faces の searchFace と同じ頂点を持つ面を検索します

見つかった場合は、顔の materialindex を searchFace に追加します

見つからない場合は、geometry.faces の searchFace と同じ頂点を 2 つ持つ面を検索します

見つかった場合は、顔の materialindex を searchFace に追加します

見つからない場合は、geometry.faces の searchFace と同じ頂点を 1 つ持つ面を検索します

見つかった場合は、顔の materialindex を searchFace に追加します

見つからない場合は、キューブ マテリアルのマテリアル インデックスを追加します

于 2013-08-12T08:23:28.843 に答える