【问题标题】:Threejs/Blender : How to decide the type of texture map to be used based on the texture imageThreejs/Blender : 如何根据纹理图像来决定要使用的纹理贴图类型
【发布时间】:2018-12-05 21:24:36
【问题描述】:

我从sketchfab 网站下载了几个3D 模型。将它们导入搅拌机并使用gltf导出器导出到.gltf文件并在三个js中使用相同的文件在浏览器上显示3D图像......(我没有在搅拌机中应用纹理,因为我想直接应用纹理文件在三个js)。我可以成功地做所有事情,但无法理解如何在三个 js 中映射纹理文件......即从 sketchfab 下载的 zip 包含 3 个纹理文件,我需要将它们应用到 3D 对象......如何决定映射到什么使用即漫反射贴图、高光贴图等......来应用这些纹理。另外,我想根据纹理图像以编程方式决定纹理贴图......有可能吗?我只需要以编程方式决定它,因为使用我的应用程序的最终用户只会将 3d 模型(即(.obj、.3ds 等)文件与纹理文件一起作为输入提供,并希望看到完整的 3D 对象)具有完美应用纹理的浏览器。谁能帮我解决这个问题?

【问题讨论】:

    标签: three.js textures blender


    【解决方案1】:

    是的。这可能很难解决。我目前使用/正在使用的方法是允许用户将文件上传到服务器,然后使用三个从服务器加载它。这要求纹理的路径是相对路径..(并非总是如此。)但对于我的目的来说似乎工作得很好..

    我无法找到一种方法来始终允许我在 three.js 中拦截不同部分的加载。如果加载器有一个接口允许您挂钩“资源提供者”,加载器用来获取正在加载的给定事物的资产,那就太好了。 所以默认情况下,它只会正常加载,但如果你提供了一个回调,你可以拦截 URL 并重定向它,或者在内存中合成一个“文件”对象作为响应。 这可以实现诸如预处理纹理和重新映射丢失/绝对纹理引用之类的事情。

    我想你可以通过拦截请求并重新映射它们在服务器上实现这一点,但这听起来很复杂,因为它需要服务器维护每个用户关于他们请求的上下文的状态,并管理整个生命周期那个。

    但在我的探索中,我没有找到一种方法来做到这一点,所以现在我要么将模型保留为原始格式(作为我服务器上的目录,以及它们的纹理/动画/等),要么我临时存储它们,允许用户检查它们/修复它们/调整它们的大小/分组它们,然后我将这些操作的结果导出为 THREE.JSON 格式或 GLTF,并将其保存到我的服务器。

    希望对您有所帮助,我希望有些人可能会提供更多信息......

    【讨论】:

    • Manthrax... 感谢您的详细回复。我明白你的意思。我的问题是,如果我在服务器上保存了一些纹理文件以及原始格式,我需要使用threejs 以编程方式将纹理文件(JPG、PNG 等)添加(即应用纹理)到场景中。这样做时,我如何推断应该将哪个纹理文件用于哪个贴图..即我们有几个贴图,如漫反射贴图、高光贴图等。所以如何知道哪个 JPG 应该用于哪个贴图然后应用该纹理?
    • 对于 OBJ 格式,除了 OBJLoader 之外,您还必须制作 MTLLoader...然后当您加载 OBJ 时,MTL 加载器会使用它来定位纹理... GLTF 加载器知道关于纹理本身..
    • 没有确切的方法可以仅根据纹理本身自动知道它属于模型的位置。您可以加载模型,然后遍历加载的模型,并检查每种材料和纹理通道,然后检查它的图像。图像不会加载,但您可以读取它的“src”,并找出它应该映射到哪个纹理......并在那里修复它。这都是非常棘手的事情,永远不会是完美的解决方案。您能否详细解释一下您要达到的目标/原因?可能还有其他解决方案...
    【解决方案2】:

    谢谢曼特拉克斯。我的应用程序将 3D 模型(.obj、.dae 等)和纹理文件作为输入,并转码为 gltf 格式文件,该文件作为threejs 的输入,在浏览器上显示完整的 3d 对象。这就是我需要的实现..我根据需要实施了更改。我从sketchfab网站下载了几个模型并尝试测试我的应用程序..我认为会有.mtl文件并且纹理文件将链接到它们,或者纹理文件可能链接到主文件(.obj、.3ds等...... )。但是,我看不到任何这样的链接,我认为我需要在threejs中以编程方式将纹理文件链接到适当的贴图(漫反射贴图等),以便我可以在浏览器上看到带有纹理的图像。现在的问题是什么纹理文件应该链接到什么地图。现在在看到你的回复后,我明白没有用户干预就无法完成。应用程序可能需要向用户提供一个平台/或对话框将纹理文件链接到相应的贴图。这是正确的理解吗.. 导入 .obj/.mtl 文件中已经存在链接的文件时不会遇到此问题,因为生成的 .gltf 文件将具有指向纹理的链接,并且 gltf 加载器会提供正确的 JSON,因此带有纹理的完整图像可以显示在浏览器上。如果我错了,请纠正我。

    【讨论】:

      猜你喜欢
      • 2019-08-12
      • 2019-03-16
      • 2014-09-26
      • 2014-06-04
      • 2022-01-08
      • 2013-10-07
      • 2019-07-31
      • 1970-01-01
      • 2018-12-30
      相关资源
      最近更新 更多