4

我将从 .ctm 文件导入的模型渲染到 threejs v71 中。然后我使用带有地图的 MeshBasicMaterial 添加纹理。

原始模型在 Agisoft Photoscan 中制作,导出为 .obj,然后使用官方 OpenCTM 查看器程序转换为 OpenCTM 格式。.ctm 模型本身就在这里

它看起来是正确的,除了当我加载 .ctm 时纹理上出现奇怪的“接缝”。.obj 在three.js 中加载良好,没有接缝。这些是什么,我该如何摆脱它们?

这是一个屏幕截图:

在此处输入图像描述

这些“接缝”不存在于纹理文件中:

在此处输入图像描述

更新:我注意到在 ctm 查看器中查看 .ctm 时也可以看到接缝,所以这可能是 OpenCtm 转换问题而不是threejs 加载问题。

4

3 回答 3

2

令我懊恼的是,这似乎是OpenCTM 中长期存在的错误

其他答案不得重现问题中描述的情况。

编辑:我现在完全理解这个问题并有一个解决方法。问题是大多数程序(Photoscan、Blender)都有“per-loop”顶点而不是实际的“per-vertex”纹理。这只是意味着当一个顶点被两个多边形共享时,该顶点可以有多个 UV 坐标。CTM 每个顶点只能有一个 UV 坐标,这就是导致纹理接缝问题的原因。

我在搅拌机中的解决方法是:

  • 岛屿接缝
  • 选择接缝上的边,选择相似 --> 接缝。现在应该选择所有接缝
  • 网格 --> 边 --> 边分割
  • 导出为.obj,使用ctmviewer.exe导入导出为.ctm。

如果您仔细观察,接缝仍然可见,但不再是明显的彩色带。

于 2016-03-16T05:20:55.343 回答
0

我的 Agisoft Photoscan 模型/纹理也遇到了同样的问题,所以我在 Photoshop 中打开了纹理,发现它在所有纹理块之间都具有透明度。我使用内容感知填充填补了所有空白,并将纹理保存为没有图层的 .tif。这为我解决了这个问题。

于 2016-01-07T11:51:16.913 回答
0

或者您可以从纹理图像文件中删除 alpha 通道(或在导出期间使用 JPG 格式)。

于 2016-01-26T11:30:38.167 回答