three.js基础-01创建基础模型

本文详细介绍了如何使用Vue+threejs或React+threejs技术栈进行3D开发,包括npm安装、创建虚拟空间、模型制作、相机设置和渲染过程。作者通过六个步骤展示了如何在虚拟世界中观察一个模型,包括空间创建、物品定义、位置设置、相机设置和渲染输出。
摘要由CSDN通过智能技术生成

一、安装

比如你采用的是Vue + threejs或React + threejs技术栈,这很简单,threejs就是一个js库,直接通过npm命令行安装就行。
npm安装特定版本three.js(注意使用哪个版本,查文档就查对应版本)

// 比如安装148版本
npm install three@0.148.0 --save

引入three.js

// 引入three.js
import * as THREE from 'three';

二、整体开发思路

three.js可以理解为在一个虚拟世界中观察一个模型,和在现实世界中是一样的。
在现实世界中观察一个物体,必须有这几步

1.第一步:有一个空间来存放这个物品

现实世界中,整个宇宙就是一个空间,我们都生活在这个空间中,在three.js中,我们也必须创造一个宇宙(空间)来让模型生存
所以第一步,创建一个虚拟空间

// 创建3D场景对象Scene
const scene = new THREE.Scene();

2.第二步:给想制作的物品画图纸

现实中,要制造一个物品,首先的有图纸,标注这个物品的大小尺寸,three.js也是一样,需要先定义物品的属性,比如长方体还是球体,大小尺寸,材质等等

//创建一个长方体几何对象Geometry,长宽高分别为100
const geometry = new THREE.BoxGeometry(100, 100, 100); 
//创建一个材质对象Material
const material = new THREE.MeshBasicMaterial({
    color: 0xff0000,//0xff0000设置材质颜色为红色
}); 

3.第三步:开始制作物品

现实中制作物品需要一大堆工具,three.js就简单了

// 两个参数分别为几何体geometry、材质material
const mesh = new THREE.Mesh(geometry, material); //网格模型对象Mesh

这样就把这个物品制作出来了,但是这个物品制作了,你得放在一个地方吧,比如地上,桌子上,对于three.js来说就是一个三维坐标

const mesh = new THREE.Mesh(geometry, material); //网格模型对象Mesh
//设置网格模型在三维空间中的位置坐标,默认是坐标原点
mesh.position.set(0,10,0);

4.第四步:将物品添加到创建的宇宙(空间)中

scene.add(mesh); 

这样我们就创建好了一个完整的基础虚拟空间了

5.第五步:用“眼睛”看这个物品

现实中制作了一个物品,你得用眼睛去看吧,闭着眼睛你也看不到这个物品,在three.js中,所谓的眼睛就是相机,通过拍摄照片来对物品进行观察

// 实例化一个透视投影相机对象
const camera = new THREE.PerspectiveCamera();

现在相机以及创造出来了,但是还需要把这个相机放在一个位置,就比如一个人你看东西,你总得站在一个位置看吧

//相机在Three.js三维坐标系中的位置
// 根据需要设置相机位置具体值
camera.position.set(200, 200, 200); 

现在相机的位置设置好了,还缺少一个角度,就比如你看东西,脑袋看向的角度不同,看到的东西就不同,这个物品在你左边,你脑袋偏向右边,那肯定是看不到的。

//相机观察目标指向Threejs 3D空间中某个位置
camera.lookAt(0, 0, 0); //坐标原点
//也可以这样
camera.lookAt(mesh.position);//指向mesh对应的位置,这样可以快速找到物品的角度

现在我们可以开始观察这个物品,在three.js中是通过相机拍照来观察物品的,现实中拍照得先确认照片大小,比如一寸,二寸照片,three.js也一样,需要设置照片的大小

// 定义相机输出画布的尺寸(单位:像素px)
const width = 800; //宽度
const height = 500; //高度

现在还需要最后一个设置,焦距,需要设置相机能拍摄的一个范围区间(在创造相机的时候,就应该设置)

// width和height用来设置Three.js输出的Canvas画布尺寸(像素px)
const width = 800; //宽度
const height = 500; //高度
// 30:视场角度, width / height:Canvas画布宽高比, 1:近裁截面, 3000:远裁截面
const camera = new THREE.PerspectiveCamera(30, width / height, 1, 3000);

PerspectiveCamera参数介绍

PerspectiveCamera( fov, aspect, near, far )
参数含义默认值
fov相机视锥体竖直方向视野角度50
aspect相机视锥体水平方向和竖直方向长度比,一般设置为Canvas画布宽高比width / height1
near相机视锥体近裁截面相对相机距离0.1
far相机视锥体远裁截面相对相机距离,far-near构成了视锥体高度方向2000

第六步:把照片打印出来

// 创建渲染器对象
const renderer = new THREE.WebGLRenderer();
// 定义threejs输出画布的尺寸(单位:像素px)
const width = 800; //宽度
const height = 500; //高度
renderer.setSize(width, height); //设置three.js渲染区域的尺寸(像素px)
renderer.render(scene, camera); //执行渲染操作
document.body.appendChild(renderer.domElement);  //插入页面中
  • 12
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值