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

相关文章
|
1月前
|
移动开发 JavaScript 前端开发
ThreeJs简介
这篇文章介绍了Three.js的基础知识,包括其相对于WebGL的优势以及如何使用Three.js创建基本的3D场景。
43 1
|
3月前
|
存储 NoSQL
three.js中的矩阵计算
three.js中的矩阵计算
40 0
|
3月前
|
编解码 JavaScript 前端开发
ThreeJs 基础学习
ThreeJs 基础学习
50 0
|
6月前
|
JavaScript 开发工具 git
Three.js第1篇,Three.js新手教学,如何在项目中使用Three.js(three.js使用流程详细,three.js的使用方式,three.js创建3d物体)
Three.js封装了WebGL的底层细节,是一款运行在浏览器中的 3D 引擎,可以用它创建各种三维场景,包括了摄影机、光影、材质等各种对象,目前在Git上已经拥有90k+的star。
152 0
Three.js第1篇,Three.js新手教学,如何在项目中使用Three.js(three.js使用流程详细,three.js的使用方式,three.js创建3d物体)
|
JavaScript 前端开发 Java
|
JavaScript 前端开发 API
Three.js学习笔记 一
在react中快速实现三维模型的创建
Three.js学习笔记   一
|
JavaScript 数据库
three.js实现酷炫散点模型
three.js实现酷炫散点模型
three.js实现酷炫散点模型
|
开发工具 git
【Three.js】关于Three.js的辅助库ststs.js报错的解决方案
【Three.js】关于Three.js的辅助库ststs.js报错的解决方案
181 0
|
Web App开发 前端开发 JavaScript
如何设计动效图——前端SVG JavaScript库Raphaël介绍
如何设计动效图——前端SVG JavaScript库Raphaël介绍
232 0
如何设计动效图——前端SVG JavaScript库Raphaël介绍
|
移动开发 JavaScript 前端开发
Three.js 入门指南
Three.js 是一个 JavaScript 库,用于在 Web 浏览器中创建 3D Web 图形。
571 0
Three.js 入门指南