Three.js Threejs/Blender:如何根据纹理图像确定要使用的纹理贴图类型

Three.js Threejs/Blender:如何根据纹理图像确定要使用的纹理贴图类型,three.js,textures,blender,Three.js,Textures,Blender,我从sketchfab网站下载了一些3D模型。将它们导入blender并使用gltf exporter导出到.gltf文件,并在三个js中使用相同的文件在浏览器上显示3D图像…(我没有在blender中应用纹理,因为我想在三个js中直接应用纹理文件)。我可以做一切成功,但无法理解如何映射纹理文件在三个js。。。i、 从sketchfab下载的zip包含3个纹理文件,我需要将它们应用到3D对象。。。如何决定使用哪些贴图,即漫反射贴图、镜面反射贴图等…来应用这些纹理。另外,我想根据纹理图像以编程方式

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

是的。这可能是相当棘手的问题。我目前使用的方法。。是允许用户将文件上载到服务器,然后使用三个从服务器加载文件。这要求纹理的路径是相对路径。。(情况并非总是如此)但就我的目的而言,似乎已经足够好了

我找不到一种方法,可以在三个.js中始终拦截不同部分的加载。如果有一个到加载程序的接口,允许您钩住一个“资源提供者”,加载程序使用该“资源提供者”来获取正在加载的给定对象的资产,那就太好了。 因此,默认情况下,它将正常加载,但如果提供回调,则可以拦截URL并重定向它,或者在内存中合成一个“File”对象以用作响应。 这可以实现诸如预处理纹理和重新映射丢失/绝对纹理引用之类的功能

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

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


希望这能有所帮助,我也希望一些人能提供更多信息……

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

曼特拉克斯。。。谢谢你的详细答复。我明白你的意思。我的问题是,如果我在服务器上保存了一些纹理文件以及原始格式,我需要使用threejs以编程方式将纹理文件(JPG、PNG等)添加到场景中(即应用纹理)。执行此操作时,如何推断应将哪个纹理文件用于哪个贴图。。i、 我们有几种贴图,如漫反射贴图、镜面反射贴图等。。那么,如何知道哪个JPG应该用于哪个贴图,然后应用该纹理呢?对于OBJ格式,除了OBJLoader之外,还必须制作一个MTLLoader。。。然后,当您加载OBJ时,MTL加载程序将与它一起定位纹理。。。GLTF加载器知道纹理本身。没有确切的方法仅根据纹理本身自动知道它在模型上的位置。。您可以加载模型,然后遍历加载的模型,检查每个材质和纹理通道,然后检查其图像。图像将不会加载,但您可以读取图像的“src”,并确定它应该映射到哪个纹理。。把它修好。这都是相当棘手的事情,永远不会是一个完美的解决方案。你能解释一下你想要实现什么/为什么吗?可能还有其他的解决方案。。。