three.js基础篇

简介: three.js基础篇

目录


导入模块

渲染器renderer

场景scene

网络模型mesh

几何体geometry

材质material

生成网络模型对象mesh

光源light

环境光ambientLight

点光源pointLight

添加坐标轴辅助线AxesHelper

相机camera

添加鼠标放大缩小旋转

顶点篇

导入模块


在项目中导入three.js包

yarn add three

页面中引入

import * as THREE from 'three'

渲染器renderer


为了目录能够呈现api的层次我把渲染器摆在前面,可以优先往下看完场景和相机,渲染器就是用于渲染它们的(renderer.render(scene,camera))。

ref在组件内定义一个box

<div ref={el => { this.box = el }}>
</div>
const height = window.innerHeight
const width = window.innerWidth
const renderer = new THREE.WebGLRenderer()
renderer.setSize(height,width)//尺寸
renderer.setClearColor(0xb9d3ff, 1)//背景色
const { box } = this
box.appendChild(renderer.domElement); //box中插入渲染器的domElement对象
renderer.render(scene,camera)//场景相机加入渲染器

场景scene


场景对象,必要的,网络模型和光源就添加在场景上

const scene = new THREE.Scene()

网络模型mesh


一个网络模型包括了很多个方面,最简单的就是几何体加上构成几何体的材质构成

几何体geometry

还有许多几何体详见three.js官方api

const geometry = new THREE.BoxGeometry(100,200,150)//柱状体,入参为在x、y、z轴上的长度
const geometry2 = new THREE.SphereGeometry(50,60,60)//球状体,入参为半径,水平分段、垂直分段,如果分段数较小得到的不是平整的球

image.png

材质material

const material = new THREE.MeshLambertMaterial({
  color:'red',//颜色
  opacity: 0.7,//透明度
  //其他入参详见官方api
})

生成网络模型对象mesh



将几何体和材质放入就生成了网络模型对象

const mesh = new THREE.Mesh(geometry,material)

将mesh添加进场景

scene.add(mesh)

光源light


环境光ambientLight


const ambient = new THREE.AmbientLight(0x444444)//16进制数字代表光强度
scene.add(ambient)//直接加入场景


点光源pointLight


const point = new THREE.PointLight(0xffffff)
point.position.set(400,200,300)//设置光源位置
scene.add(point)
• 1
• 2
• 3

添加坐标轴辅助线AxesHelper


const axesHelper = new THREE.AxesHelper(250);
axesHelper.setColors('red', 'blue', 'yellow')
scene.add(axesHelper); //网格模型添加到场景中

相机camera


const height = window.innerHeight//当然也可以后面存放场景的容器的高度
const width = window.innerWidth//当然也可以后面存放场景的容器的宽度
const k = width/height
const s = 200 //系数越大,可以看作相机离得越远,视口更大
const camera = new THREE.OrthographicCamera(-s*k,s*k,s,-s,1,1000)
camera.position.set(200,100,200)//相机位置
camera.lookAt(scene.position)//相机方向设置为场景方向

添加鼠标放大缩小旋转


//需要导入对应的api
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'
//renderer.render(scene, camera) 修改渲染器渲染过程,放入一个函数
function rend(params) {
    renderer.render(scene, camera);
}
rend()
const controls = new OrbitControls(camera, renderer.domElement)
controls.addEventListener('change', rend)

顶点篇


想要继续深入学习移步:three.js顶点篇

相关文章
|
前端开发 JavaScript 定位技术
threejs绘制风羽
threejs绘制风羽
777 0
|
前端开发 JavaScript 算法
轻松实现数字格式化:JavaScript 中的千分位分隔技巧大揭秘
轻松实现数字格式化:JavaScript 中的千分位分隔技巧大揭秘
1003 0
|
3月前
|
安全 Java 数据库连接
SpringBoot使用小汇总
Spring Boot基于Spring框架,通过“约定优于配置”和丰富Starter依赖,简化企业级Java应用开发。具备零配置、内嵌服务器、自动依赖管理及生产级特性,适用于微服务与单体架构。本文从核心特性、开发实践、性能优化与生态扩展四方面深入解析。
237 2
|
前端开发 API
【threejs教程】让你的场景动起来!深入了解threejs场景及坐标轴
【8月更文挑战第5天】让你的场景动起来!深入了解threejs场景及坐标轴
267 0
【threejs教程】让你的场景动起来!深入了解threejs场景及坐标轴
|
API
【threejs教程】threejs中的边边角角:几何体详解
【8月更文挑战第6天】threejs中的几何体详解
572 4
【threejs教程】threejs中的边边角角:几何体详解
|
存储 缓存 算法
详解 PyTypeObject,Python 类型对象的载体
详解 PyTypeObject,Python 类型对象的载体
288 3
|
JavaScript
vue 中对style、disable 等样式进行条件判断
vue 中对style、disable 等样式进行条件判断
598 1
|
JavaScript
【vue】深入探讨vue中组件间多种传值方式
【vue】深入探讨vue中组件间多种传值方式
247 1
【vue】深入探讨vue中组件间多种传值方式
|
JavaScript 前端开发
CMD和UMD,ES Module的差别
CMD和UMD,ES Module的差别
|
Java 应用服务中间件 Maven
第一个Spring Boot程序
第一个Spring Boot程序
545 0