three.js加载gltf文件过程以及遇到的问题

news2024/11/19 23:24:54

说明:在vue项目中使用的threejs;

刚开始,我是从网上下载的gltf文件,将.gltf 文件放在了src/assets/xxx.gltf   , 对gltf格式的文件并不了解,使用如下方式加载gltf文件时,

// 创建gltf加载器对象
const loader = new GLTFLoader();
let that = this;
  loader.load("/models/gltf/box.gltf", (gltf) => {
     const model = gltf.scene;
     that.scene.add(model);
});

提示  : Unexpected token '<', "<!DOCTYPE "... is not valid JSON

经过CSDN的查找,找到了解决办法:将  .gltf 文件放在了public下才行;

将文件路径更改后,报错了,提示:GLTFLoader.js:191 RangeError: Invalid typed array length: 75201

原来是 .gltf 文件中 引入了  .bin  格式的文件了,虽然 .gltf 和 .bin 两个文件在同一个路径下,在 .gltf 文件中就是找不到 .bin 格式的文件;

更改路径,暂时还不会,无奈只能在blender工具中自己做一个demo,然后导出 .gltf 格式的文件,然后在threejs中使用了;

导出设置如下:

如此设置,页面中终于可以显示效果了;效果如下:

 在代码中,我单独加了一个环境光;

主要代码如下:

<template>
  <div>
    <el-container>
      <el-header
        style="
          display: flex;
          align-items: center;
          justify-content: space-between;
        "
      >
        <el-page-header @back="goBack" :content="name + '详情页面'">
        </el-page-header>
      </el-header>
      <el-main>
        <div class="box-card-left">
          <div id="threejs" style=""></div>
          <div class="box-right">
            glTF是一种免版税的规范,用于引擎和应用程序高效传输和加载3D场景和模型。<br />
            glTF最小化了3D资产的大小,以及解包和使用它们所需的运行时处理。<br />
            glTF定义了一种可扩展的发布格式,通过在整个行业中实现3D内容的互操作使用,简化了创作工作流程和交互服务。<br />
            glTF2.0已作为ISO/IEC 12113:2022国际标准发布。<br />
          </div>
        </div>
      </el-main>
    </el-container>
  </div>
</template>
<script>
import Drawer from "@/components/Drawer.vue";
// 引入轨道控制器扩展库OrbitControls.js
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";
import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader.js";
import { onlyEnterMoney } from "@/utils/fn.js";
export default {
  components: { Drawer },
  data() {
    return {
      name: "",
      x: 0,
      y: 0,
      z: 0,
      cameraX: 200,
      cameraY: 200,
      cameraZ: 200,
      scene: null,
      camera: null,
      renderer: null,
      mesh: null,
      mesh_sun: null,
      geometry: null,
      group: null,
      axis: null,
      texture: null,
    };
  },
  created() {},
  mounted() {
    this.name = this.$route.query.name;
    this.init();
  },
  methods: {
    goBack() {
      this.$router.go(-1);
    },
    // 沿着自定义的方向移动。
    init() {
      // 1,创建场景对象
      this.scene = new this.$three.Scene();
      // 创建透视投影相机对象
      this.camera = new this.$three.PerspectiveCamera(60, 1, 0.01, 1000);
      this.camera.position.set(20, 20, 20);
      this.camera.lookAt(0, 0, 0); // 记得设置相机指向,
      // 创建辅助坐标轴对象
      const axesHelper = new this.$three.AxesHelper(200);
      this.scene.add(axesHelper);
      // 创建环境光对象
      const light = new this.$three.AmbientLight(0xffffff);
      this.scene.add(light);

      // 4,创建渲染器
      this.renderer = new this.$three.WebGLRenderer();
      this.renderer.setSize(1000, 800);
      this.renderer.render(this.scene, this.camera);
      document.getElementById("threejs").appendChild(this.renderer.domElement);
      // 创建gltf加载器对象
      const loader = new GLTFLoader();
      let that = this;
      loader.load("/models/gltf/box.gltf", (gltf) => {
        const model = gltf.scene;
        that.scene.add(model);
   
        this.renderFun();
        const controls = new OrbitControls(this.camera, this.renderer.domElement);
        controls.addEventListener('change', () => {
          this.renderer.render(this.scene, this.camera);
        })
      });
    },

    renderFun() {
      this.renderer.render(this.scene, this.camera);

    },
  },
};
</script>
<style lang="less" scoped>
.msg {
  padding: 20px;
  text-align: left;
  display: flex;
  justify-content: flex-start;
  flex-wrap: wrap;
  .span {
    margin: 0 30px 30px 0;
    // white-space: nowrap;
  }
  .p {
    text-align: left;
  }
}
.box-card-left {
  display: flex;
  align-items: flex-start;
  flex-direction: row;
  width: 100%;
  .box-right {
    text-align: left;
    .xyz {
      width: 100px;
      margin-left: 20px;
    }
    .box-btn {
      margin-left: 20px;
    }
  }
}
</style>

附件放在了中国移动云盘上 了,坚决抵制垃圾的恶心的最2比百度云盘,限速,就是让你开通会员,开通会员后下载文件,下的也不一定完整;

附件地址:

链接:https://caiyun.139.com/m/i?185C7GGV8U40d
提取码:PZWy
复制内容打开移动云盘PC客户端,操作更方便哦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1031976.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[RF学习记录][参数读取]从yaml文件读取参数变量

robotframework支持从yaml文件读取变量&#xff0c;对于比较多的参数&#xff0c;可以在yaml文件中定义好&#xff0c;在robot脚本中引用 1、定义yaml文件 文件内容如下&#xff0c;注意&#xff0c;变量和变量值之间要以4个字符分开 yaml_demo_name: tester traing_gpt_…

GC1262R/S 国产芯片,具有高效的直接 PWM 控制方式,它可以控制无刷直流电机转速,可替代APX9262R/茂达

GC1262R/S 是单线圈无刷直流电机的 电机驱动器。 具有高效的直接 PWM 控制方式&#xff0c;它可以控制无刷直流电机转速。它集成了最低速度限制模式、可调速度 斜率控制模式、软启动模式、风扇转速计、 锁保护、自动重启、TSD、OCP 和噪声控制模 式&#xff0c;噪声控制模式根据…

JavaScript的Web Worker

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ JavaScript的Web Worker⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量…

全国直播基地排名前十,西南人气最旺的成都直播产业基地即将正式开园

直播产业作为新媒体行业的重要组成部分&#xff0c;在近年来得到了迅速发展。四川成都作为全国直播基地排名前十的城市之一&#xff0c;人气最旺的直播基地——成都天府蜂巢直播产业基地&#xff0c;即将正式开园。 同一决心&#xff0c;推动资源 对于即将开园的成都直播产业基…

【中秋国庆】旅行公众号文章排版素材大全

中秋国庆节长假即将来临&#xff0c;你是否已经做好了旅行计划&#xff1f;在这个举国同庆的时刻&#xff0c;何不走出家门&#xff0c;去感受大自然的壮美、领略历史的厚重以及品尝地道的美食呢&#xff1f; 随着假期的临近&#xff0c;各大公众号纷纷推出了相关文章&#xff…

拉斯克奖(Lasker Award)2023

拉斯克奖&#xff08;Lasker Award&#xff09;2023 &#x1f508;&#x1f508;&#x1f508;&#xff1a;deep learning的两位科学家获得了拉斯克奖&#xff0c;这让人不禁对今年的诺贝奖展开大胆的预测。 1. 拉斯克奖&#xff08;Lasker Award&#xff09;简介 Lasker-De…

汽配制造问题以及MES管理系统解决方案

在汽车工业中&#xff0c;零部件制造与整车制造有着显著的不同。这些差异导致了零部件制造的复杂性和高要求&#xff0c;使其成为一个高度综合的最终产品。本文将详细介绍这些差异以及针对这些差异的解决方案。 一、行业特点决定需求 汽车配件制造与整车制造存在较大不同。在整…

【李沐深度学习笔记】线性代数

课程地址和说明 线性代数p1 本系列文章是我学习李沐老师深度学习系列课程的学习笔记&#xff0c;可能会对李沐老师上课没讲到的进行补充。 线性代数 标量 标量&#xff08;scalar&#xff09;&#xff0c;亦称“无向量”。有些物理量&#xff0c;只具有数值大小&#xff0c…

为什么定时发朋友圈会更有效呢?

这是因为在同一时段 发送的好友朋友圈 无法有效分散用户的注意力 导致曝光度难以提升 而通过推广定时发朋友圈 可根据自己的粉丝活跃度 设置发圈时间 让每一条朋友圈都能高效 传递到更多的好友手中 这样&#xff0c;曝光度自然而然地就大大提升了&#xff01; 1.多个号…

SpringBoot_快速入门

一、SpringBoot 概述 文档下载地址&#xff1a;https://docs.spring.io/spring-boot/docs/current/reference/ 1.SpringBoot介绍 概述&#xff1a;SpringBoot 开发团队认为Spring操作太繁琐了&#xff0c;目的在于简化开发配置&#xff0c;能够快速搭建开发环境&#xff0c;…

【JavaWeb】你这么厉害,知道RBAC权限模型和ABAC权限模型吗?

文章目录 一.RBAC 权限模型1.RBAC的组成2.RBAC模型分类2.1.基本模型RBAC02.2.角色分层模型RBAC12.3.角色限制模型RBAC22.4.统一模型RBAC3 3.RBAC0模型核心表结构3.1.表结构设计3.2.模块划分 4.基于RBAC的延展—用户组 二.ABAC权限模型&#xff08;基于Java讲解&#xff09;1.AB…

WSUS 修补程序管理的替代方法

什么是 WSUS Windows Server Update Services &#xff08;WSUS&#xff09; 是 Microsoft for Windows Server 提供的免费附加组件&#xff0c;WSUS 从Microsoft更新中下载必要的修补程序和更新&#xff0c;并将其分发到 Windows 网络中存在的 Windows 操作系统和相关Microso…

头条文章采集工具-快速获取头条文章方法

头条文章采集。在这个信息快速爆炸的时代&#xff0c;如何轻松而高效地获取头条新闻和热门文章成为了许多人的问题。而147SEO将成为您的信息导航&#xff0c;为您打开头条文章采集的大门&#xff0c;让您畅游信息海洋。 免费全自动采集发布批量管理网站工具-147SEO​www.147seo…

应用层 DNS Linux 下解析域名命令 dig 命令使用详解

查询单个域名的 DNS 信息 dig 命令最典型的用法就是查询单个主机的信息。 linuxidclinuxidc:~$ dig www.linuxidc.com; < <>> DiG 9.11.3-1Ubuntu1.5-Ubuntu < <>> www.linuxidc.com ;; global options: cmd ;; Got answer: ;; ->>HEADER< &…

浅述AI视频智能分析技术及TSINGSEE视频智能解决方案

AI视频智能分析是一种基于人工智能的技术&#xff0c;传统的视频监控方法通常需要由人工对大量视频流进行手动观察&#xff0c;而视频智能分析技术则可以详细检查视频流&#xff0c;并能及时发现异常。TSINGSEE青犀视频AI视频智能分析技术主要包括以下几个方面&#xff1a; 1&a…

指针(二)------字符指针+数组指针+指针与数组(传参)

&#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;C语言 &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&#x1f69a; &#x1f339;&#x1f339;&#x1f339;关注我带你学习编程知识 前言&#xff1a; 在指针&#xff08;一&#xf…

[医学图像知识]CT图和PET图的成像表现形式

1.CT图通常来说是单通道灰色图&#xff0c;用灰度值表示了结构对于x射线的吸收程度。 2.PET/SPECT图最初也是灰度图&#xff0c;用灰度值表示细胞的反射gama射线的程度&#xff0c;但是为了更好的观测不同细胞等的区别&#xff0c;通常将灰度图转化为了 伪彩色图像。 找个例子…

原生js值之数据类型详解

js的数据类型 数据类型分类基本数据类型boolean:布尔类undefined:未定义的值null类型数值转换 NumberparseInt 转换整数 parseFloat转换浮点数 String类型特点如何转换成字符串模板字面量字符串插值模板字面量标签函数 symbol类型特性使用 BigInt类型复杂数据类型Object类属性与…

卡奥斯第二届1024程序员节正式启动!

代码改变世界&#xff0c;开源创造未来&#xff0c;卡奥斯第二届1024程序员节开始啦&#xff01; 本次活动设置4个线上活动分会场: 低代码分会场、开源分会场、知识分会场和产品分会场&#xff0c;共12个奖项&#xff0c;1100多个奖品&#xff0c;雷神911X猎荒者游戏本&#x…

一文搞定Postman(菜鸟必看)

什么是Postman&#xff1f; Postman是一个可扩展的 API 测试工具&#xff0c;可以快速集成到 CI/CD 管道中。它于 2012 年作为 Abhinav Asthana 的一个副项目启动&#xff0c;旨在简化测试和开发中的 API 工作流程。API 代表应用程序编程接口&#xff0c;它允许软件应用程序通…