首页 > 解决方案 > Threejs/Blender : 如何根据纹理图像来决定要使用的纹理贴图类型

问题描述

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

标签: three.jstexturesblender

解决方案


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

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

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

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

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


推荐阅读