【Three.js基础学习】19.Custom models with Blender

embedded/2024/9/24 20:22:13/

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

blender模型资源:【blender】一个汉堡包-CSDN博客

一、代码

import './style.css'
import * as THREE from 'three'
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js'
import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader.js'
import * as dat from 'dat.gui'/*** Base*/
// Debug
const gui = new dat.GUI()// Canvas
const canvas = document.querySelector('canvas.webgl')// Scene
const scene = new THREE.Scene()/*** Models*/
const dracoLoader = new DRACOLoader()
dracoLoader.setDecoderPath('/draco/')const gltfLoader = new GLTFLoader()
gltfLoader.setDRACOLoader(dracoLoader)let mixer = nullgltfLoader.load('/models/hamburger.glb',(gltf) =>{scene.add(gltf.scene)}
)/*** Floor*/
const floor = new THREE.Mesh(new THREE.PlaneBufferGeometry(50, 50),new THREE.MeshStandardMaterial({color: '#444444',metalness: 0,roughness: 0.5})
)
floor.receiveShadow = true
floor.rotation.x = - Math.PI * 0.5
scene.add(floor)/*** Lights*/
const ambientLight = new THREE.AmbientLight(0xffffff, 0.8)
scene.add(ambientLight)const directionalLight = new THREE.DirectionalLight(0xffffff, 0.6)
directionalLight.castShadow = true
directionalLight.shadow.mapSize.set(1024, 1024)
directionalLight.shadow.camera.far = 15
directionalLight.shadow.camera.left = - 7
directionalLight.shadow.camera.top = 7
directionalLight.shadow.camera.right = 7
directionalLight.shadow.camera.bottom = - 7
directionalLight.position.set(5, 5, 5)
scene.add(directionalLight)/*** Sizes*/
const sizes = {width: window.innerWidth,height: window.innerHeight
}window.addEventListener('resize', () =>
{// Update sizessizes.width = window.innerWidthsizes.height = window.innerHeight// Update cameracamera.aspect = sizes.width / sizes.heightcamera.updateProjectionMatrix()// Update rendererrenderer.setSize(sizes.width, sizes.height)renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2))
})/*** Camera*/
// Base camera
const camera = new THREE.PerspectiveCamera(75, sizes.width / sizes.height, 0.1, 100)
camera.position.set(- 8, 4, 8)
scene.add(camera)// Controls
const controls = new OrbitControls(camera, canvas)
controls.target.set(0, 1, 0)
controls.enableDamping = true/*** Renderer*/
const renderer = new THREE.WebGLRenderer({canvas: canvas
})
renderer.shadowMap.enabled = true
renderer.shadowMap.type = THREE.PCFSoftShadowMap
renderer.setSize(sizes.width, sizes.height)
renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2))/*** Animate*/
const clock = new THREE.Clock()
let previousTime = 0const tick = () =>
{const elapsedTime = clock.getElapsedTime()const deltaTime = elapsedTime - previousTimepreviousTime = elapsedTimeif(mixer){mixer.update(deltaTime)}// Update controlscontrols.update()// Renderrenderer.render(scene, camera)// Call tick again on the next framewindow.requestAnimationFrame(tick)
}tick()


总结

想学建模,但是没时间!想学three.js,但是忘得差不多了!不想工作,这可怎么办呢。


http://www.ppmy.cn/embedded/102121.html

相关文章

Ubuntu20.04下解决ROS与Anaconda冲突,取消终端默认base虚拟环境

0. 背景知识 在Ubuntu系统中,存在两个python:python2.7和python3.8(注意这两个版本不可删除,否则Ubuntu系统瘫痪);装了anaconda后,出现了第三个版本的python3.9。 因此系统中三个版本python&a…

PHP概述-特点-应用领域-如何学习

老师建议注册使用百度文心一言;讯飞星火大模型-AI大语言模型-星火大模型-科大讯飞;Kimi.ai - 帮你看更大的世界 等人工智能工具软件的一个到两个,也可下载文心一言、讯飞星火、kimi等APP软件使用,对于我们在读的大二学生来说有什么…

Spring八股文

重点 描述一下bean的生命周期 简述版 调用构造器 或者是通过工厂的方式创建Bean对象给bean对象的属性注入值调用初始化方法,进行初始化, 初始化方法是通过init-method来指定的.使用IOC容器关闭时, 销毁Bean对象 详细: 1. 实例化 …

前端算法 === 力扣 111 二叉树的最小深度

目录 问题描述 DFS(深度优先搜索)方案 BFS(广度优先搜索)方案 总结 力扣(LeetCode)上的题目111是关于二叉树的最小深度问题。这个问题可以通过深度优先搜索(DFS)和广度优先搜索&…

【RabbitMQ】快速上手

目 录 一. RabbitMQ 安装二. RabbitMQ 核心概念2.1 Producer 和 Consumer2.2 Connection 和 Channel2.3 Virtual host2.4 Queue2.5 Exchange2.6 RabbitMQ 工作流程 三. AMQP四. web界面操作4.1 用户相关操作4.2 虚拟主机相关操作 五. RabbitMQ 快速入门5.1 引入依赖5.2 编写生产…

DDOS攻击学习-渗透测试-域名信息收集

文章目录 wordpress漏洞利用域名信息收集域名介绍域名分类 whoiswhois反查子域名收集子域名发现网络空间安全搜索引擎SSL证书查询js文件发现子域名 wordpress漏洞利用 这个一般都需要安装wordpress服务使用wpscan扫描,但现在一般很少人知道或者使用wordpress所以这个…

大模型RAG应用开发之PDF解析工具对比

一 汇总 类型名称地址OCR提取表格内容保留文本顺序提取图片保存成md格式其他特性传统PDF解析库pymupdfhttps://github.com/pymupdf/PyMuPDF❌✔️✔️✔️❌● 表格提取● 自定义字体传统PDF解析库pdfminerhttps://github.com/pdfminer/pdfminer.six❌❌✔️❌❌● 版面分析传…

EtherCAT 转 ModbusTCP 网关

设备简介 本产品是 EtherCAT 和 Modbus TCP 网关,使用数据映射方式工作。 本产品在 EtherCAT 侧作为 EtherCAT 从站,接 TwinCAT 、 CodeSYS 、 PLC等;在 ModbusTCP 侧做为 ModbusTCP 主站( Client )或从站…