当前位置: 首页 > news >正文

three.js尝试渲染gbl模型成功!(三)

参照教程:https://cloud.tencent.com/developer/article/2276766?areaSource=102001.5&traceId=88k805RaN_gYngNdKvALJ
(作者:九仞山)

通过最近两天查three.js入门教程了解到 这玩应支持包括 .obj、.gltf等类型的模型结构。
glTF(GL传输格式)是Khronos的一个开放项目,它为3D资产提供了一种通用的、可扩展的格式,这种格式既高效又与现代web技术高度互操作。

import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader"
// GLTF加载器(GLTFLoader),用于载入glTF 2.0资源的加载器。
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls"
// OrbitControls是THREEJS中最常用的一个控制器,可以帮助我们实现以目标为焦点的旋转缩放。

(上面这方法 我还是报错 OrbitControls从cdn里引还行 GLTFLoader 可能是地址错还是咋的 也不成)
虽然名字为GLTFLoader,但实际上glb文件也是能加载的

有个模型素材网站 外国地 有免费和收费模型下载
https://sketchfab.com/search?features=downloadable&type=models

在这里插入图片描述
不要钱地就会有下载按钮
在这里插入图片描述
选择要下载的格式
在这里插入图片描述
这里先尝试glb (别问为啥 问就是找的教程里用的这格式 )
下载完长这样 给他复制到 项目里
在这里插入图片描述
gltf文件
gltf文件全称Graphics Language Transmission Forma(图形语言传输格式),是一种三维模型格式,用于传输和加载3D场景和模型;其号称是图形界的JPEG,能够实现快速的模型数据交换。

gltf文件核心是JSON文件,一个gltf文件可传输一个或多个场景, 包括网格、材质、贴图、蒙皮、骨架、变形目标、动画、灯光以及摄像机等信息。

加载gltf文件
下面通过代码实现加载一个gltf格式的文件到场景中,首先还是需要创建场景、相机、渲染器等初始化代码,具体步骤查看前面章节,代码如下

<!DOCTYPE html>
<html lang="en"><head><title>three.js 3d model text</title><meta charset="utf-8"><meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"><link type="text/css" rel="stylesheet" href="main.css"><style>body {background-color: #bfe3dd;color: #000;}a {color: #2983ff;}</style></head><body><div id="container"></div><script type="importmap">{"imports": {"three": "../build/three.module.js","three/addons/": "./jsm/"}}</script><script type="module">import * as THREE from 'three';import { OrbitControls } from 'three/addons/controls/OrbitControls.js';import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';// 定义变量let scene,camera,rendererlet axesHelperlet hesLight,dirLight,sportLight let controls       // 初始化场景initScene()// 初始化辅助轴initAxesHelper()// 初始化灯光initLight()// 初始化meshinitMesh()// 初始化相机initCamera()// 初始化渲染器initRenderer()// 循环动画animate()// 初始化轨道控制器initControls()window.addEventListener('resize',function() { camera.aspect = window.innerWidth / window.innerHeightcamera.updateProjectionMatrix()renderer.setSize(window.innerWidth,window.innerHeight)})function initScene() {scene = new THREE.Scene()scene.background = new THREE.Color(0xffffff)}function initAxesHelper() {// axesHelper = new THREE.AxesHelper(5)// scene.add(axesHelper)}function initLight() {//     hesLight = new THREE.HemisphereLight(0xffffff,0xffffff)//     hesLight.intensity = 0.8//     scene.add(hesLight)//     dirLight = new THREE.DirectionalLight()//     dirLight.position.set(5,5,5)//     scene.add(dirLight)//     sportLight = new THREE.SpotLight(0xffffff)//     sportLight.position.set(0,10,10)//      scene.add(sportLight)               const ambientLight = new THREE.AmbientLight(0xffffff, 1.5);scene.add(ambientLight);const directionalLight = new THREE.DirectionalLight(0xffffff, 2);directionalLight.position.set(10, 10, 10)scene.add(directionalLight);}function initMesh() {}function initCamera() {camera = new THREE.PerspectiveCamera(75,window.innerWidth / window.innerHeight,0.1,100)camera.position.set(1.5,1.5,1.5)}function initRenderer() {renderer = new THREE.WebGLRenderer({antialias:true})renderer.setPixelRatio(window.devicePixelRatio)renderer.setSize(window.innerWidth,window.innerHeight) document.body.appendChild(renderer.domElement) }function initControls() { controls = new OrbitControls(camera, renderer.domElement)}function animate() {requestAnimationFrame(animate)renderer.render(scene,camera)}const loader = new GLTFLoader()//   loader.load( 'models/gltf/chinese_house.glb',function(gltf) {loader.load( 'models/gltf/cute_character.glb',function(gltf) {console.log(gltf);  scene.add(gltf.scene)})//解决加载gltf格式模型纹理贴图和原图不一样问题renderer.outputEncoding = THREE.sRGBEncoding;</script></body></html>

因为我OrbitControls GLTFLoader 鼠标控制器和模型加载器引入一直报错 最后复制的官网案例文件可以成功渲染

import * as THREE from ‘three’;
import { OrbitControls } from ‘three/addons/controls/OrbitControls.js’;
import { GLTFLoader } from ‘three/addons/loaders/GLTFLoader.js’;

在这里插入图片描述
第一个3D模型就渲染出来了 !!!
谁的嘴角比AK还难压我不说
在这里插入图片描述

相关文章:

  • unable to find a medium containing a live file system解决办法!
  • c++的学习之路:22、多态(1)
  • 【MATLAB源码-第184期】基于matlab的FNN预测人民币美元汇率 输出预测图误差图RMSE R2 MAE MBE等指标
  • [lesson17]对象的构造(上)
  • 设计模式:适配器模式
  • Linux 内核的构建块:深入探索 C 结构体的应用
  • 蓝桥杯-冶炼金属(二分求最大最小)
  • 搭建前后端的链接(java)
  • 5.4Python之可变类型与列表的深浅拷贝
  • React 状态管理:安全高效地修改对象属性的 3 种方法
  • Linux CPU利用率
  • 通往 AGI 的道路上,OpenAI 逐渐构建了全模态的工具集
  • 【算法优选】 动态规划之简单多状态dp问题——贰
  • OpenHarmony分布式软总线API调用测试工具 softbus_tool使用说明
  • 设计模式-接口隔离原则
  • 自己简单写的 事件订阅机制
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • [译] React v16.8: 含有Hooks的版本
  • 2017-08-04 前端日报
  • ES2017异步函数现已正式可用
  • GitUp, 你不可错过的秀外慧中的git工具
  • JavaScript设计模式与开发实践系列之策略模式
  • java中具有继承关系的类及其对象初始化顺序
  • MySQL QA
  • Netty 4.1 源代码学习:线程模型
  • Python socket服务器端、客户端传送信息
  • React-flux杂记
  • SSH 免密登录
  • 翻译--Thinking in React
  • 基于游标的分页接口实现
  • 技术发展面试
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 深度学习中的信息论知识详解
  • 手写双向链表LinkedList的几个常用功能
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​iOS安全加固方法及实现
  • # 达梦数据库知识点
  • #QT(一种朴素的计算器实现方法)
  • #Z2294. 打印树的直径
  • #宝哥教你#查看jquery绑定的事件函数
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (1)Nginx简介和安装教程
  • (C#)获取字符编码的类
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (翻译)terry crowley: 写给程序员
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (汇总)os模块以及shutil模块对文件的操作
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (一)Neo4j下载安装以及初次使用
  • ****Linux下Mysql的安装和配置