学习three.js —— 第一天

news/2024/7/24 8:38:26 标签: 学习, javascript

1.创建三要素

  • 场景

    // 创建场景
    const scene = new THREE.Scene()

  • 相机

    // 创建透视相机
    const camera = new THREE.PerspectiveCamera(a,b,c,d)
    // 参数含义
    // a:相机可视垂直角度;b:相机可视长宽比;c:近端距离;d:远端距离

  • 渲染器

    // 创建渲染器
    const renderer = new WebGLRenderer()
    // 设置渲染器的大小
    renderer.setSize(window.innerWidth,window.innerHeight)

2.获取canvas画布,并将其加入到body中

document.body.appendChild(renderer.domElement)

3.创建几何体

// 创建几何体
const geometry = new THREE.BoxGeometry(1,1,1)

4.创建材质

// 创建材质
const Material = new.THREE.MeshBssicMaterial({color:0xff00ff,wireframe:true})
// color:材质颜色;wireframe:为true时,渲染网格将会呈现线框形式

5.创建网格

几何体 + 材质 -> 物体

const cube = new THREE.Mesh(geometry,Material)
// geometry:几何体;Material:材质

// 将网格添加到场景中
scene.add(cube)

6.设置相机的位置

相机的位置就相当于人是视角

camera.position.z = 5
camera.position.y = 3
camera.position.x = 2
// 设置相机看向的位置(默认为原点)
camera.lookAt(0,0,0)

7.渲染

renderer.render(scene,camera)

在这里插入图片描述

完成以上操作,边可以在页面上渲染一个基础的立方体,可以通过一下操作进一步完善。

设置响应式画布

监听窗口变化,做出响应的操作

window.addEventListener('resize',()=>{
	// 重新设置渲染器的宽高比
	renderer.setSize(window.innerWidth,window.innerHeight)
	// 重新设置相机的宽高比
	camera.aspect(window.innerWidth/window.innerHeight)
	// 更新相机投影矩阵
	camera.updateProjectionMatrix()
})

世界坐标

为了更好的观察,我们可以添加一个世界坐标辅助器

const axesHelper = new THREE.AxesHelper(5)
// 将世界坐标辅助器添加到场景中
scene.add(axesHelper);

在这里插入图片描述

轨道控制器

// 导入轨道控制器
import { OrbitControls } from "three/addons/controls/OrbitControls.js";
// 添加轨道控制器
const controls = new OrbitControls(camera,render,domElement)
// 设置带阻尼的惯性
controls.enableDamping = true
// 阻尼系数
controls.dampingFactor = 0.05

GUI控件

// 引入lil.gui
import { GUI } from "three/examples/jsm/libs/lil-gui.module.min.js";
// 创建GUI
const gui = new GUI()
// 利用folder对控件进行分组
let folder = gui.addFolder("立方体的位置")
folder.add(cube.position,"x",-5,5).name("x轴方向的位置")
folder.add(cube.position,"y").min(-5).max(5).step(1).name("y轴方向的位置")

let folder1 = gui.addFolder("旋转");
folder1.add(cube.rotation, "x", -Math.PI, Math.PI).name("绕x轴旋转");

gui.add(Material,"wireframe").name('线框模式')

let coloeParams = {
  cubeColor:'#00ff00'
}
gui.addColor(coloeParams,'cubeColor').name('立方体颜色').onChange(val=>{
  cube.material.color.set(val)
})

在这里插入图片描述


http://www.niftyadmin.cn/n/4930797.html

相关文章

vscode + docker + python

1,docker run的时候要加上port docker run -it --gpusall -p 2222:22 -v /挂载目录/:/docker 目录1/ -v /挂载目录/:/docker 目录2/ --namexxx image:v2 /bin/bash 2,docker 内部要安装ssh 2.1方法命令: apt-get update apt-get install…

Vue原理解析:Vue到底是什么?

Vue.js是一种流行的JavaScript框架,用于构建用户界面。它采用了MVVM(Model-View-ViewModel)架构模式,旨在简化Web应用程序的开发过程。Vue具有响应式的数据绑定和组件化的特性,使得开发者能够以声明式的方式构建可复用…

光威神策DDR5 6800超频破10GHz,国产良心价高端内存创造历史

前段时间光威把8000MHz的DDR5内存打到了千元以内,但是因为当时AMD平台还不支持,确实是馋哭了很多AMD玩家,这两天AMD总算发布了新版AM5主板固件,AGESA 1.0.0.7B BIOS,让AMD Ryzen 7000系列CPU和主板能够支持8000MHZ以上…

人工智能讲师AIGC讲师叶梓:大模型这么火,我们在使用时应该关注些什么?

以下为叶老师讲义分享: P2-P5 大语言模型的演进 开山鼻祖:Transformer 常见的大模型 我们应该关注些什么? 事实描述的正确性2、知识的时效性3、理解、运用语言的能力4、上下文连贯性5、抗干扰(误导)性能6、无害性7、…

【2023 华数杯全国大学生数学建模竞赛】 A题 隔热材料的结构优化控制研究 问题分析及完整论文

【2023 华数杯全国大学生数学建模竞赛】 A题 隔热材料的结构优化控制研究 问题分析及完整论文 1 题目 A 题 隔热材料的结构优化控制研究 新型隔热材料 A 具有优良的隔热特性,在航天、军工、石化、建筑、交通等高科技领域中有着广泛的应用。 目前,由单…

搭建了个腾讯滑块服务,直接取ticket的,仅供测试.

最近闲着没事搭建了个TX滑块验证码服务,C#写的. 接口是rest接口 提交任务POST http://47.104.132.20:19090/task/addTask 提交数据: { "url": "https://ssl.captcha.qq.com/template/wireless_mqq_captcha.html?stylesimple&aid16&uin3557247785…

SpringBoot项目启动失败:共三处错误,都是依赖的问题┭┮﹏┭┮

文章目录 项目启动报错1:Spring MVC found on classpath, which is incompatible with Spring Cloud Gateway项目启动报错2:Failed to determine a suitable driver class项目启动报错3:Failed to start bean documentationPluginsBootstrapp…

JDBC连接数据库如何实现你会吗???

1.首先建立一个maven项目。。。详细过程来了哇 还没有安装maven的童鞋可以看这里:maven的下载安装与配置环境变量!!!(全网最详细)_明天更新的博客-CSDN博客 有很多小伙伴就有疑问啦,难道我直接…