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顶点篇

相关文章
|
8天前
|
JavaScript 开发工具 git
Three.js第1篇,Three.js新手教学,如何在项目中使用Three.js(three.js使用流程详细,three.js的使用方式,three.js创建3d物体)
Three.js封装了WebGL的底层细节,是一款运行在浏览器中的 3D 引擎,可以用它创建各种三维场景,包括了摄影机、光影、材质等各种对象,目前在Git上已经拥有90k+的star。
33 0
Three.js第1篇,Three.js新手教学,如何在项目中使用Three.js(three.js使用流程详细,three.js的使用方式,three.js创建3d物体)
|
10月前
|
JavaScript 前端开发 定位技术
WebGis——Pixi开发vue项目之创建pixi应用并显示一个精灵(一)
WebGis——Pixi开发vue项目之创建pixi应用并显示一个精灵(一)
|
11月前
|
算法 前端开发 定位技术
vue3 + canvas 实现坦克大战系列(二):核心原理讲解(上)
vue3 + canvas 实现坦克大战系列(二):核心原理讲解(上)
190 0
|
11月前
|
前端开发 定位技术
vue3 + canvas 实现坦克大战系列(二):核心原理讲解(下)
vue3 + canvas 实现坦克大战系列(二):核心原理讲解(下)
85 0
|
JavaScript 前端开发 API
Three.js学习笔记 一
在react中快速实现三维模型的创建
Three.js学习笔记   一
|
开发工具 git
【Three.js】关于Three.js的辅助库ststs.js报错的解决方案
【Three.js】关于Three.js的辅助库ststs.js报错的解决方案
152 0
|
JavaScript 数据库
three.js实现酷炫散点模型
three.js实现酷炫散点模型
three.js实现酷炫散点模型
干货!layerGroup在LeafLet中的实战
需求场景:boss想针对分子公司进行统一展示,有可能在地图上统一添加、移除、统一调整图标等操作。常规做法可以采用遍历法,去循环所有的marker,批量操作。此时,可以采用layerGroup的方式,将所有分子公司存放在一个layer中,通过分组,可以批量操作存放在layerGroup中
512 0
干货!layerGroup在LeafLet中的实战
|
前端开发 JavaScript 容器
Three.js入门: 构建一个立方体
Three.js 是一个 JavaScript 库,用于在 Web 浏览器中创建 3D Web 图形。前面介绍过一些基本的知识和实现简单的效果《Three.js 入门指南》和《【Three.js】随着元宇宙开启WEB3D之路》,本文从简单的构建立方体出发,介绍一些基础概念。
162 0
|
移动开发 JavaScript 前端开发
Three.js 入门指南
Three.js 是一个 JavaScript 库,用于在 Web 浏览器中创建 3D Web 图形。
443 0
Three.js 入门指南