【问题标题】:Threecsg flat sides when expecting volumetric result预期体积结果时的 Threecsg 平面
【发布时间】:2019-08-25 05:28:29
【问题描述】:

问题:

从一个球体中减去一个立方体会得到一个结果,其中 z 轴保留体积,但 y 和 x 轴产生平盘,如图所示。我不确定为什么球体在这些方面会失去体积。我正在使用带三个CSG 的典型减法。

代码:

  var geometry = new THREE.CubeGeometry( 100, 100, 100 );
  var material = new THREE.MeshLambertMaterial( {color: 0xff0000, side: THREE.DoubleSide, transparent:true, opacity: .5} );
  var cutter = new THREE.Mesh( geometry, material );

  var geometry2 = new THREE.SphereGeometry(60,32, 32);
  var material2 = new THREE.MeshLambertMaterial( {color: 0x00ff00, side: THREE.DoubleSide, transparent:true, opacity: .5} );
  var massing = new THREE.Mesh( geometry2, material2 );


  var cutter_bsp = new ThreeBSP(cutter);
  var massing_bsp = new ThreeBSP(massing);

  var new_bsp = massing_bsp.subtract(cutter_bsp);

  var result = new_bsp.toMesh(material2);
  result.geometry.computeVertexNormals();
  result.position.y = 200;

我使用的是 v 103,但问题似乎与版本无关,因为 77 显示相同的问题。

问题: 为什么结果的边是平的?我需要在减法运算之前以某种方式转换几何吗?

这是盒子和球体上方的结果:

【问题讨论】:

    标签: javascript three.js threecsg


    【解决方案1】:

    @manthrax 在此处发布了他的代码作为答案,但随后将其删除。可在此处获得:https://github.com/manthrax/THREE-CSGMesh

    https://github.com/radio412/THREE-CSGMesh/ 分叉并删除了导出令牌。

    如果应用了任何变换,网格需要在操作之前调用 updateMatrix()。

    此代码运行良好。但是,我不知道为什么遗留的 ThreeCSG 代码不起作用,如果有一些见解会很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-14
      • 2015-07-13
      • 2020-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多