Three.JS 线框材质 - 所有多边形与仅边缘

Posted

技术标签:

【中文标题】Three.JS 线框材质 - 所有多边形与仅边缘【英文标题】:Three.JS wireframe material - all polygons vs. just edges 【发布时间】:2013-12-07 20:31:43 【问题描述】:

我在一个项目中使用 ThreeJS,并注意到旧版本渲染线框的方式与新版本不同,我不知道如何恢复(我更喜欢)。

这个使用版本 54 的小提琴仅渲染使用线框材质绘制的对象的外部边缘:http://jsfiddle.net/ksRyQ/ 或如图所示,以防这是特定于平台的(我在 mac chrome 上):

另一方面,当我使用较新版本的 r61 在本地运行相同的代码时,我会看到每个多边形的边缘,如下所示:

这两种情况的代码都很简单:

material = new THREE.MeshBasicMaterial(
    color: 0xff0000,
    wireframe: true
);

我确信我可以用线条或其他东西制作立方体,但我宁愿真正理解这个问题。

有什么线索吗?是否有此设置或可以调整的东西?其次,您会注意到现在代码使用的是画布渲染器,虽然我打算使用 webGL 渲染器,但两者都存在相同的现象(尽管存在其他差异)。

【问题讨论】:

【参考方案1】:

如果您想渲染给定geometry 的线框,您现在可以使用此模式:

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,了解如何渲染模型及其线框。

编辑:更新到三个.js.r.82

【讨论】:

为了详细说明,您会看到对角线,因为从 Three.js 中删除了对四面体的支持,因此现在使用三角形来实现 CubeGeometry 和其他人。 知道了,谢谢 Yaku,这肯定回答了我的基本问题——如果我想要别的东西,我只需要画不同的东西。 我在 71 版,没有 EdgesGeometry 或 WireframeGeometry,我可以用什么代替? 这不取决于我,我在 Autodesk Viewer 上,这是他们使用的版本...... 如何使用具有变化网格的动画对象来实现这一点?

以上是关于Three.JS 线框材质 - 所有多边形与仅边缘的主要内容,如果未能解决你的问题,请参考以下文章

使用Three.js的材质

使用Three.js的材质

Collada 纹理上的线框覆盖 - three.js

在 Three.Js 中剪裁一个体积,给出黑色区域而不是内部材质

three.js 着色器材质基础

如何有效地渲染具有多边形边缘的网格表面?