【问题标题】:three.js filling gaps between edges三.js填充边缘之间的间隙
【发布时间】:2019-12-05 12:54:54
【问题描述】:

我在 Blender 中创建了一个带有孔的块的模型:

我将其导出为 .obj 文件,然后使用 OBJLoader 插件将其导入 ThreeJS。

当我在我的应用程序中使用它时,它似乎在孔的两侧绘制了一张脸:

有没有我需要在 ThreeJS 中使用的设置来避免像这样关闭间隙?或者是我如何创建模型的问题?我完全迷路了,感谢任何指导。

编辑:我通过反复试验发现问题在于具有不规则形状的面,例如与孔相邻的面。我通过对模型进行三角测量“解决了”我的问题;虽然这会稍微改变它的形状,但它可以确保孔中的每个顶点都是三角形面的一部分,这似乎是一个神奇的答案。

我仍然很好奇为什么会这样,特别是因为三角测量使盒子的角落有点奇怪。

编辑 2:抱歉耽搁了。这是搅拌机文件:https://gofile.io/?c=EoxH1r

【问题讨论】:

  • 你能在这个帖子中分享blend文件吗?
  • 当然!我现在不在家,但我会在几个小时后上传。很抱歉最初没有包含它!
  • @Mugen87 我添加了 .blend 文件。抱歉耽搁了!
  • 我已将资产导出到 glTF 而不是 OBJ,并通过以下基于 three.js 的查看器对其进行了验证:gltf-viewer.donmccurdy.com。结果看起来是正确的。 glTF其实是three.js推​​荐的3D格式。所以使用glTF 可能是最简单的解决方案。
  • 谢谢@Mugen87!感谢您抽出宝贵时间:) 我将尝试 glTF 格式

标签: three.js 3d blender


【解决方案1】:

您遇到的问题是因为ngons(多于 4 个边的多边形)。

为three.js 建模就像为游戏建模一样,所以最好避免使用超过4 个边的多边形,因为当渲染器(或显卡,我不知道)尝试渲染模型时,它必须应用三角剖分并且可能以意想不到的方式做到这一点。

正如您所说,对模型应用三角剖分解决了问题,但在您的建模应用程序中自动应用三角剖分也可能会产生意想不到的结果。因此,最好的办法是更改模型,以便获得预期的结果。

这是我发现的一个 youtube 视频,它似乎解释了很多关于 ngons 的内容。
https://www.youtube.com/watch?v=BjnCV2PIkKA
(虽然我只看了第一分钟左右)

这是我如何做的一个例子,红线代表添加的边缘。记得在两边都这样做,并在导出前应用平滑组。

【讨论】:

  • 真的很感激!愚蠢的问题,但你是如何添加这些边缘的?我通过选择两个顶点(一个“锚点”和一个沿孔)并按下f 来尝试此操作,用于“制作边/面”工具。不过,我怀疑这会增加一张脸/做一些时髦的事情,因为它会沿着模特的脸创建可见的线条。有没有更好的方法给形状添加边缘?
  • 我发布的图片,我只是在photoshop中画线来演示它。如何加入 2 个顶点取决于您使用的 3d 软件。在谷歌上快速搜索应该会为您使用的任何软件产生结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-01
  • 2017-11-23
  • 1970-01-01
  • 1970-01-01
  • 2015-02-28
  • 1970-01-01
  • 2022-08-18
相关资源
最近更新 更多