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

时间:2018-06-27 05:23:45

标签: three.js textures blender

我已经从sketchfab网站下载了一些3D模型。将它们导入到Blender中并使用gltf exporter导出到.gltf文件,并在三个js中使用相同的文件在浏览器上显示3D图像...(我没有在Blender中应用纹理,因为我想直接在中应用纹理文件threejs)。我可以成功完成所有操作,但无法理解如何在三个js中映射纹理文件...即,从sketchfab下载的zip包含3个纹理文件,我需要将其应用于3D对象...如何决定要映射到什么使用即弥散贴图,镜面贴图等...来应用这些纹理。另外,我想基于纹理图像以编程方式确定纹理贴图...有可能吗?我只需要以编程方式决定它,因为使用我的应用程序的最终用户只会将3d模型(即(.obj,.3ds等...)文件)与纹理文件一起作为输入,并希望看到完整的3D对象。浏览器具有完美应用的纹理。有人可以帮我吗?

2 个答案:

答案 0 :(得分:0)

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

我无法找到一种方法始终如一地允许我在three.js中拦截不同部分的加载。如果加载程序有一个接口,它允许您挂接“资源提供程序”,加载程序将其用于获取要加载的给定事物的资产,那就太好了。 因此,默认情况下,它只会正常加载内容,但是如果提供了回调,则可以拦截URL并将其重定向,或在内存中合成“ File”对象以用作响应。 这样可以启用诸如预处理纹理以及重新映射缺失/绝对纹理引用之类的功能。

我想您可以通过拦截请求并重新映射它们在服务器上实现此操作,但这听起来确实很复杂,因为这将要求服务器针对每个用户的请求状态维护其状态,并管理整个生命周期。

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

希望有帮助,我希望有些人可能会收到更多信息。...

答案 1 :(得分:0)

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