threejs(七)glTF加载

1. 基本概念

1.1 glTF是什么

GLTF/GLB:

GLTF (GL Transmission Format) 是一种基于 JSON 的开放标准 3D 文件格式。(WebGL、OpenGL 中的 “GL” 和 GLTF 中的 “GL” 是相同的单词。)

GLB 是 GLTF 的二进制版本,文件体积较小,便于传输

Three.js 内置了GLTFLoader用于加载和解析 GLTF/GLB 格式的模型。

gltf的文件是直接渲染的,不可再次编辑,所以对于一些渲染而言不重要的数据通常都已被删除,例如多边形都已转化为三角形。

关于更多 glTF 信息,可以查看其官网:www.khronos.org/gltf/

1.2 glTF格式的三种表现形式

1. glTF二进制(.glb

  1. .glb:其中所有网格数据,图像纹理和相关信息都打包到一个二进制文件中。

2. glTF分离式(.gltf + .bin + textures)

  1. gltf:3D 场景的所有概要信息,包括灯光、纹理贴图等信息,该文件的内容具体形式为 JSON
  2. .bin:模型的二进制数据,包含网格和矢量数据的文件
  3. 纹理贴图资源:纹理图片 xxx.jpg 或 .png

3. glTF嵌入式 (.gltf)

  1. .gltf:以 JSON 形式保存所有场景信息数据,包括材质和纹理信息。这种形式由于文件内容是 json,因此是可以通过文本再次编辑的

.glb === .gltf + .bin + textures

Blender 默认导出 glTF 2.0 格式时,采用的是 .glb 后缀形式。 想要更改成别的导出形式,我们可以在 Blender 导出项 格式下拉框中更改为 “.gltf 分离(.gltf + .bin + 纹理)” 或 “glTF嵌入式(.gltf)”。那么此时导出的文件格式就是 .gltf 后缀形式。

1.3 在Blender中导出gltf文件

在blender打开源文件,如下图所示

base.png

直接导出后,在threejs中加载后变成了这样: daochu.png

出现这种材质贴图不见,且原来有弧度的地方变形的情况,不用怀疑,就是导出的时候出了问题。

官方解释:

glTF的内部结构模拟了图形芯片在实时渲染时常用的内存缓冲区,这样资产可以交付到面、网页或移动终端,并以最少的处理进行迅速显示。 因此,当导出为glTF时,四边形和多边形会自动转换为三角形。 与Blender相比,不连续的UV和平面阴影边缘可能导致glTF中的顶点数适度增多,因为这样的顶点会被分开以导出。 同样,曲线和其他非网格数据不会保留,必须在导出之前转换为网格。

docs.blender.org/manual/zh-h…

所以要从blender入手去解决导出的问题。要将展示的物体转换成网格模式。也就是在blender建模模式下,右键转换到网格,可一次性应用修改器。

这里去掉一些不想展示的物体和参考图,修改为网格模式,导出glb格式文件。

vs.png

左侧为导出的glb在threejs中的展示,右侧图为blender中的模型展示,所以除了纹理和贴图,blender模型中的着色器渲染是哪一步不对,导致色彩丢失了呢?如果只是简单的BSDF材质是可以渲染的,但我们模型中使用到了 纹理坐标生成分离xyz增加渐变效果。

blender.png

翻阅资料,查看到例如使用UV映射,则需要设置使用名为 KHR_texture_transform 的glTF扩展导出。

UV映射:通过将UV贴图节点和映射节点连接到任何图像纹理节点,可以控制UV贴图选择和转换。 映射节点中的设置使用名为 KHR_texture_transform 的glTF扩展导出。顶部有一个映射类型选择器。推荐使用  导出。也支持 纹理 和 矢量 。支持的偏移量是:

位置 – X和Y

旋转 – 仅限Z

缩放 – X和Y

对于 纹理 类型,缩放 X和Y必须相等(均匀缩放)。

docs.blender.org/manual/zh-h…

但是八青妹找了一天也不知道这些扩展在哪里安装和选择,blender的版本为4.1,问题出在哪儿呢?后续研究后再来更新解决方法

2. gltf加载器

2.1 加载方式

threejs的扩展库gltf加载器GLTFLoader.js

js

代码解读
复制代码
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
// 创建GLTF加载器对象
const loader = new GLTFLoader();

gltf加载器方法.load(),在加载后,可以更改指定物体的属性。

js

代码解读
复制代码
loader.load('/demo.glb',function(gltf) {
    const model = gltf.scene;
    //获取模型中名称为立方体035的物体
    const cube = model.getObjectByName('立方体035');
    if(cube) {
    //给该物体添加属性
        cube.material.color.set(0xff0000);
        cube.material.opacity = 0.5;
        cube.material.transparent = true;
    }
    // 调整模型缩放和旋转
    model.scale.set(1.5,1.5,1.5);

    // 把gltf.scene里面模型添加到场景scene中
    scene.add(model);
})

blender建模学习推荐kurtwei.com/ 的视频,每个视频都很用心,没有一句废话,逻辑清晰,有条有理。

最后附上几个线上glTF的文件资源。

一个宇航员: modelviewer.dev/shared-asse…

一只小鸭子:

  1. vr.josh.earth/assets/mode…
  2. vr.josh.earth/assets/mode…
  3. vr.josh.earth/assets/mode…

头盔cdn.khronos.org/assets/api/…

宇航员modelviewer.dev/shared-asse…

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请不要用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性

GLB下载网 - GLB/GLTF模型与格式资源免费下载,支持在线浏览与转换 » threejs(七)glTF加载器

常见问题FAQ

免费下载或者VIP会员专享资源能否直接商用?
本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
提示下载要提取码
百度网盘提取码都是gltf。
分享过期和重复下载怎么办
分享过期请使用备份下载,重复下载是不另扣费的,请放心下载。
模型和平台不兼容怎么办
可以用网站在线编辑功能,修改模型属性,大小,方向,坐标,中心,透明等问题,然后重新导出既可https://glbxz.com/38636.html
开通VIP 享更多特权,建议使用 QQ 登录