【问题标题】:ThreeJS - Wireframe for mesh in object formatThreeJS - 对象格式的网格线框
【发布时间】:2019-08-22 01:43:58
【问题描述】:

我正在尝试显示加载了OBJLoader() 的目标文件的线框。这是我正在使用的代码的一部分:

var loader = new THREE.OBJLoader();

loader.load( filePath, function ( object ) {

        object.traverse( function ( child ) {

        if ( child instanceof THREE.Mesh ){

        var  geometry = child.geometry;

        materialMesh = child.material;

        mesh = new THREE.Mesh(geometry, materialMesh);

        var useWireFrame = true;
          if (useWireFrame) {
              mesh.traverse(function (child) {
                    if (child instanceof THREE.Mesh) 
                      {
                        child.material.wireframe = true;
                        hild.material.color = new THREE.Color( 0xff0000 );
                      }
                });
              }

          }// end if

           scene.add( object );
        });

    });

在下图中是我想要得到的结果:

但是,这就是我的代码得到的结果:

每个单元格都有对角线!谁能告诉我应该修改什么以获得与第一张图片等效的结果?

谢谢!

【问题讨论】:

  • 您必须绘制四边形而不是三角形作为网格的基元,才能将其作为线框,我认为 ThreeJS 不支持。所以我认为使用线框不可能得到你想要的结果。相反,您可以尝试在网格上使用 GridHelper 以获得类似的效果。
  • 您好,感谢您的回答,请看下面我的评论。

标签: object three.js mesh loader wireframe


【解决方案1】:

如果你想渲染一个给定几何图形的线框,你现在可以使用这个模式:

var geo = new THREE.EdgesGeometry( geometry ); // or WireframeGeometry( geometry )
var mat = new THREE.LineBasicMaterial( { color: 0xffffff, linewidth: 2 } );
var wireframe = new THREE.LineSegments( geo, mat );
scene.add( wireframe );

WireframeGeometry 将渲染所有边缘。 EdgesGeometry 只会渲染硬边。

另请参阅this related answer,了解如何渲染模型及其线框。

【讨论】:

    【解决方案2】:

    线框助手通常可视化由其基元定义的对象的实际线框模型。四边形在 WebGL 中不是原始的。只有三角形、线和点(参见WebGL specification)。因此,three.js 中也没有线框助手来产生您想要的视觉效果。

    【讨论】:

    • 感谢您的回答,但是您在图片中看到的是相同的文件对象。一个是顶部由搅拌机可视化,第二个由 ThreeJS 场景可视化。所以基元不是三角形!应该有办法获得相同的可视化效果。
    • 你知道你的 Blender 对象在导出时是三角剖分的吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 2017-04-11
    • 2018-12-13
    • 2017-10-11
    • 1970-01-01
    相关资源
    最近更新 更多