1

ThreeCSG を使用して、プラットフォームの「穴」を差し引こうとしています。大きなプラットフォームの特定の場所で穴を差し引いてほしい。

  var geometry = new THREE.CubeGeometry( 500, 10, 500 );
  var hole_geometry = new THREE.CubeGeometry( 50, 11, 50 );

  var material = Physijs.createMaterial( new THREE.MeshLambertMaterial( { color: 0xEEEEEE } ), 0.2, 0.8  );
  var hole_material = Physijs.createMaterial( new THREE.MeshLambertMaterial( { color: 0x000000, side: THREE.DoubleSide } ), 0.2, 0.8  );

  var platform = { platform: null, hole: null };

  // platform
  platform.platform = new Physijs.BoxMesh(geometry, material, 0);
  platform.platform.position.y = -i*300;
  var platformBSP = new ThreeBSP( platform.platform );

  // hole
  platform.hole = new Physijs.BoxMesh(hole_geometry, hole_material, 0);
  platform.hole.position.y = -i*300;
  platform.hole.position.x = Math.floor(Math.random()*(251))*(Math.random() < 0.5 ? -1 : 1);
  platform.hole.position.z = Math.floor(Math.random()*(251))*(Math.random() < 0.5 ? -1 : 1);
  var holeBSP = new ThreeBSP( platform.hole );

  platformBSP = platformBSP.subtract(holeBSP);
  platform.platform = platformBSP.toMesh(material);
  platform.platform.position.y = -i*300;


  scene.add( platform_array[i].platform );
  scene.add( platform_array[i].hole );

私の問題は、穴が Threejs から ThreeCSG に変換されるたびに、位置が考慮されないため、プラットフォームに作成されたすべての穴がランダムな場所ではなく中心になることです。

ThreeCSG オブジェクトに変換された後に「穴」を再配置する方法に関するドキュメントが見つからないようです。

4

2 に答える 2