Three.js一学就会系列:05 加载3D模型

这篇具有很好参考价值的文章主要介绍了Three.js一学就会系列:05 加载3D模型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

系列文章目录

Three.js一学就会系列:01 第一个3D网站
Three.js一学就会系列:02 画线
Three.js一学就会系列:03 炫酷3D划线
Three.js一学就会系列:04 炫酷3D文字



前言

最近开始入坑前端3D建站,跟大家一起慢慢深入three.js做网站3D

这篇文章给大家讲下 如何加载一个3D模型


一、核心代码讲解

引入插件

  import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'
  import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'
  import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader'

GLTFLoader :
加载GLTF加载器,glTF(gl传输格式)是一种开放格式的规范 (open format specification), 用于更高效地传输、加载3D内容。该类文件以JSON(.gltf)格式或二进制(.glb)格式提供, 外部文件存储贴图(.jpg、.png)和额外的二进制数据(.bin)
OrbitControls :
轨道控制器(OrbitControls)Orbit controls(轨道控制器)可以使得相机围绕目标进行轨道运动。
DRACOLoader :
一个加载器的几何压缩与Draco库。Draco是一个开源库,用于压缩和解压缩3D网格和点云。压缩后的几何图形可以显著变小,代价是在客户端设备上花费额外的解码时间。

轨道控制器

this.controls = new OrbitControls(camera, renderer.domElement)
this.controls.target = new THREE.Vector3(0, 0, 0)

controls.target:设置控制器的焦点,.object的轨道围绕它运行

加载3D文件

const loader = new GLTFLoader()
const dracoLoader = new DRACOLoader()
dracoLoader.setDecoderPath('https://threejs.org/examples/jsm/libs/draco/')
dracoLoader.preload()
loader.setDRACOLoader(dracoLoader)

loader.load('https://threejs.org/examples/models/gltf/LittlestTokyo.glb', (gltf) => {
  scene.add(gltf.scene)
  renderer.render(scene, camera)
}, (xhr) => {
  console.log((xhr.loaded / xhr.total) * 100 + '% loaded')
}, (error) => {
  console.error(error)
})

setDecoderPath:设置draco文件地址
loader.load(‘https://threejs.org/examples/models/gltf/LittlestTokyo.glb’) 加载3D模型

完整代码

<template>
  <section>
    <section id="container"></section>
  </section>
</template>

<script>
  import * as THREE from 'three'
  import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'
  import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'
  import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader'
  let camera, scene, renderer
  export default {
    data() {
      return {
      }
    },
    mounted() {
      this.init()
      this.animate()
    },
    methods: {
      init() {
        const container = document.getElementById('container')
        camera = new THREE.PerspectiveCamera(90, container.clientWidth / container.clientHeight, 0.1, 10000)
        renderer = new THREE.WebGLRenderer({ antialias: true })

        camera.position.set(50, 200, 500)

        scene = new THREE.Scene()

        renderer.setClearColor(new THREE.Color(0xF7F2F1))
        renderer.setSize(container.clientWidth, container.clientHeight)
        renderer.shadowMap.enabled = true

        container.appendChild(renderer.domElement)

        this.controls = new OrbitControls(camera, renderer.domElement)
        this.controls.target = new THREE.Vector3(0, 0, 0)

        this.loadLight()
        this.load3D()
      },
      load3D() {
        const loader = new GLTFLoader()
        const dracoLoader = new DRACOLoader()
        dracoLoader.setDecoderPath('https://threejs.org/examples/jsm/libs/draco/')
        dracoLoader.preload()
        loader.setDRACOLoader(dracoLoader)

        loader.load('https://threejs.org/examples/models/gltf/LittlestTokyo.glb', (gltf) => {
          scene.add(gltf.scene)
          renderer.render(scene, camera)
        }, (xhr) => {
          console.log((xhr.loaded / xhr.total) * 100 + '% loaded')
        }, (error) => {
          console.error(error)
        })
      },
      loadLight() {
        // 环境光
        const ambient = new THREE.AmbientLight(0xFFFFFF)
        scene.add(ambient)
        const pointLight = new THREE.PointLight( 0xffffff, 0.5 );
        pointLight.position.set( 100, 200, 500 );
        pointLight.color.setHSL( 255, 255, 255 );
        scene.add( pointLight );
      },
      animate() {
        requestAnimationFrame(this.animate)
        renderer.render(scene, camera)
      }
    }
  }
</script>

<style>
body,html {
  padding: 0;
  margin: 0;
}
</style>

<style scoped>
  #container {
    width: 100%;
    height: calc(100vh);
  }
</style>

效果

threejs加载3d模型,# 前端-three.js一学就会系列,javascript,3d,开发语言,three.js,前端

二、3D模型资源

公共领域的glTF文件可以在网上找到,例如 Sketchfab,或者很多工具包含了glTF的导出功能:
Blender by the Blender Foundation
Substance Painter by Allegorithmic
Modo by Foundry
Toolbag by Marmoset
Houdini by SideFX
Cinema 4D by MAXON
COLLADA2GLTF by the Khronos Group
FBX2GLTF by Facebook
OBJ2GLTF by Analytical Graphics Inc

更多请参考:https://threejs.org/docs/index.html#manual/zh/introduction/Loading-3D-models

总结

以上就是今天要讲的内容,本文仅仅简单介绍了three.js的加载3D模型,而three.js提供了非常多的3D显示功能,后续文章,我将带大家慢慢深入了解。

如果觉得有用欢迎点赞关注
有问题私信我!!~~文章来源地址https://www.toymoban.com/news/detail-784475.html

到了这里,关于Three.js一学就会系列:05 加载3D模型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • macOS安装Python&&Pycharm详解!保姆级教程,一学就会!

    有需要打包好的PycharmPython激活码和安装包也可直接扫下方 首先登陆python官网:www.python.org/ 点击Download按钮,选择自己电脑的系统,有些时候网页可以自动识别 下载最新的python 版本号是随着版本发展不断演进,上图中显示3.12.2。但都是python3 等待下载完成,打开文件,一直点

    2024年04月25日
    浏览(39)
  • 【一学就会】Facebook脸书视频下载一秒保存手机

    Facebook作为一家全球知名的社交媒体平台和在线社交网络服务公司,提供了一个在线平台,使用户分享照片、视频、状态更新和链接等内容,然而,令人遗憾的是,Facebook没有为用户提供直接将照片和视频保存到本地的功能,因此,无法保存自己喜欢的视频图片。 今天在这里

    2024年02月04日
    浏览(159)
  • postman导入请求到jmeter进行简单压测,开发同学一学就会

    这个事情也是最近做的,因为线上nginx被我换成了openresty,然后接入层服务也做了较大改动,虽然我们这个app(内部办公类)并发不算高,但好歹还是压测一下,上线时心里也稳一点。 于是用jmeter简单压测下看看,这里记录一下。 这次也就找了几个接口来压:登录接口、登录

    2024年04月25日
    浏览(36)
  • Three.js--》建模软件如何加载外部3D模型?

    目录 三维建模软件的介绍 Blender官方文档介绍 Blender软件安装 GLTF格式简介 gltf不同文件形式         看过我之前讲解的three文章的人都知道,我在创建模型的时候都没有使用three.js自带的一些简单模型,而是引入外部的模型并加载到页面上, 简言之 :对于简单的立方体、

    2024年02月06日
    浏览(40)
  • 【three.js / React-three-fiber】加载3D模型性能优化

    无论是大型虚拟世界还是简单的网站,性能优化都是必要的。 特别是在运用三维模型的情况下,我们需要更加深入的优化。因为 三维模型通常包含大量的数据和复杂的几何形状 ,如果不进行性能优化,浏览器可能会因为负载过重而崩溃。 在本文中,我们将探讨如何在 thre

    2024年02月02日
    浏览(48)
  • three.js加载3D模型,在网页上展示3D模型(.glb.gltf.fbx格式)

    Three.js是一款开源的主流3D绘图JS引擎,简单点,可以将它理解为three+js就可以了,three表示3D,js表示JavaScript的意思。 结构  .glb.gltf文件最好放在服务器上 放在本地容易报找不到的错 .fbx格式文件可以在本地用3d看图(win10自带)打开另存为.glb格式 index.html代码 js代码 项目案例

    2024年02月11日
    浏览(53)
  • Three.js 模型加载及加载简单动画

    时间过的好快啊~再一次感叹,忙忙碌碌一年又过去了,新年第一帖,新的一年也要加油呀! 简单介绍下Three.js吧,Three.js是基于原生WebGL封装运行的三维引擎,在所有WebGL引擎中,Three.js是国内文资料最多、使用最广泛的三维引擎。因为使用简单,入门比较容易。 Three.js的具体

    2024年02月12日
    浏览(45)
  • Three.js之加载外部三维模型

    建模软件绘制3D场景 … 加载.gltf文件(模型加载全流程) 注:基于Three.js v0.155.0 三维建模软件 gltf格式 加载.gltf文件 OrbitControls辅助设置相机参数:相机位置、相机目标对象 gltf不同文件形式(.glb) 模型命名(程序与美术协作): .getObjectByName() 递归遍历层级模型修改材质: .traverse

    2024年02月05日
    浏览(39)
  • three.js添加3d模型

    three官方的几何体也就那么几个,想要生成各种各样的模型,其难度十分之大,这时引入外部模型也不失为一种选择。具体引入办法如下。 虽然名字为GLTFLoader,但实际上glb文件也是能加载的。 其中需要注意的是调节相机参数与相机位置,否则很有可能导致场景中看不见任何东

    2024年02月04日
    浏览(87)
  • Three.js加载FBX模型并解析骨骼动画

    通过Threejs先加载一个.FBX格式的三维模型文件,然后解析该文件中的骨骼动画信息。  FBX 加载器 FBXLoader.js 加载fbx模型文件 加载模型文件,加载完成后,如果模型显示位置不符合要求,可以通过Threejs程序进行平移、缩放等操作。 查看FBX模型帧动画数据 stl、obj都是静态模型,

    2024年02月07日
    浏览(77)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包