Three.js 快速入门:核心五步构建3D场景

作者:小圆点时间:2026-10-21 20:49:37浏览:145

本文详解Three.js开发的五个核心步骤:配置渲染器以处理三维到二维的映射,设置透视或正交相机确定视角,初始化场景容器,添加环境光与定向光等光源,最后创建并渲染几何物体。通过具体代码示例,帮助开发者快速掌握Three.js基础架构与实现流程。

Three.js核心五步概览

使用Three.js进行开发主要包含五个关键步骤:

第一步是配置Three.js的渲染器。

第二步是配置摄像机(Camera)。

第三步是创建场景(Scene)。

第四步是添加光源(Light)。

第五步是创建并添加物体(Object)。

配置渲染器

第一步:配置Three.js渲染器

将三维空间中的物体投影到二维屏幕的过程称为三维渲染,执行此操作的组件即为渲染器。具体而言,需要处理以下渲染逻辑。


var renderer;
function initThree(){
 width = document.getElementById("box").clientWidth;
 height = document.getElementById("box").clientHeight;
 /**
 //声明渲染器对象:WebGLRenderer 
 renderer=new THREE.WebGLRenderer({ 
  antialias:true, //是否开启反锯齿 
  precision:"highp", //着色精度选择 
  alpha:true,  //是否可以设置背景色透明 
  premultipliedAlpha:false, 
  stencil:false, 
  preserveDrawingBuffer:true, //是否保存绘图缓冲 
  maxLights:1  //maxLights:最大灯光数 
 }); 
 */
 renderer = new THREE.WebGLRenderer({
 antialias:true
 });/*生成渲染器对象(属性:抗锯齿效果为设置有效)*/
 renderer.setSize(width,height);
 document.getElementById("box").appendChild(renderer.domElement);
 /*设置canvas背景色(clearColor)和背景色透明度(clearAlpha) */
 renderer.setClearColor(0xFFFFFF,1.0);
}

设置摄像机

第二步:配置摄像机(Camera)

在OpenGL(WebGL)标准中,将三维物体投影至二维空间主要有两种相机模式:透视投影和正交投影。

a. 透视投影:模拟人眼视觉效果,近大远小,即距离视点越近的物体显示越大,远处的物体显示较小,符合日常观察习惯。

b. 正交投影:无论物体距离视点远近,均按统一比例绘制,不产生近大远小的效果。这种投影方式在建筑制图和设计领域应用广泛,因为需要从多个角度保持物体尺寸的一致性。在Three.js中,开发者可以指定使用透视投影或正交投影相机。本文后续步骤将演示如何设置透视投影方式。

(1) 声明全局变量(对象);

(2) 初始化透视投影相机;

(3) 设定相机的位置坐标;

(4) 指定相机的“上”方向为Z轴;

(5) 设定相机视线的中心坐标。


var camera;
function initCamera(){
 /*PerspectiveCamera的四个参数
 参数1:为视野角 ,
 参数2:纵横比。这参数几乎总是使用的元素的宽度除以高度,否则你会看到像老电影中的那样,图像被压扁了.
 参数3:相机允许离物体的最近距离.
 参数4;相机允许离物体的最远距离.默认情况之下,相机的上方向为Y轴,右方向为X轴,向里为Z轴.*/
 camera = new THREE.PerspectiveCamera(45,width/height,1,10000);
 camera.position.x = 0;
 camera.position.y = 1000;
 camera.position.z = 0;
 camera.up.x = 0;
 camera.up.y = 0;
 camera.up.z = 1;
 camera.lookAt({x:0,y:0,z:0}); //设置视野的中心坐标 
}

创建场景

第三步:创建场景


var scene;
function initScene(){
 scene = new THREE.Scene();
}

添加光源

第四步:添加光源(Light)

在OpenGL(WebGL)三维空间中,主要存在点光源和聚光灯两种类型。此外,平行光源(无限远光源)可视为点光源的一种特例。除了上述光源外,还可以设置环境光。对应地,Three.js支持设置[点光源(Point Light)]、[聚光灯(Spot Light)]、[平行光源(Directional Light)]以及[环境光(Ambient Light)]。与OpenGL类似,在一个场景中可以添加多个光源。通常的做法是将环境光与其他几种光源组合使用。如果不设置环境光,光线无法直接照射到的区域会变得过于黑暗。本文首先按照以下步骤设置平行光源,随后会补充环境光设置。

(1) 声明全局变量(对象)

(2) 设置平行光源

(3) 设定光源向量(位置)

(4) 将光源添加到场景中

/*** 光照(light) ***/ new THREE.AmbientLight(颜色); // 环境光 new THREE.PointLight(颜色, 强度, 距离); // 点光源 new THREE.DirectionalLight(颜色, 亮度); // 平行光 new THREE.SpotLight(颜色, 强度, 距离, 夹角, 衰减指数); // 聚光灯


var light;
function initLight(){
 light = new THREE.DirectionalLight(0xFF0000, 1.0, 0); //平行光
 light.position.set(100, 100, 200); //设置光源位置
 scene.add(light); //将官员添加到场景
}

创建物体

第五步:创建物体

//几何形状 CubeGeometry(长, 宽, 高, 长的分割, 宽的分割, 高的分割); // 立方体 PlanGeometry(长,宽, 长的分割, 宽的分割); // 平面 SphereGeometry(半径, 经度切片, 纬度分割, 经度分割, 经度跨过, 纬度开始, 纬度跨过); // 球体 CircleGeometry(半径, 切片数, 开始, 跨过角度); // 圆形 CylinderGeometry(顶部面积, 底部面积, 高, 圆分割, 高分割, 是否没有顶面和底面); // 圆台 TetrahedronGeometry(半径, 细节); // 正四边形 OctahedronGeometry(半径, 细节); // 正八边形 IconsahedronGeometry(半径, 细节); // 正十二边形 TorusGeometry(半径, 管道半径, 纬度分割, 经度分割, 圆环面的弧度); // 圆环面


var sphere;
function initObject(){
 sphere = new THREE.Mesh(new THREE.SphereGeometry(200,200)/*设置球体的大小*/,new THREE.MeshLambertMaterial({color:0xff0000})/*设置球体的材质*/); //材质设定 
 scene.add(sphere); 
 sphere.position.set(0,0,0); /*设置物体位置*/
} 

执行渲染

第六步:执行渲染


function threeExcute(){ 
 initThree(); 
 initCamera(); 
 initScene(); 
 initLight(); 
 initObject(); 
 renderer.clear(); 
 renderer.render(scene,camera); 
}

完整代码示例


<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Document</title>
 <script src="http://cdn.bootcss.com/three.js/r83/three.min.js"></script>
</head>
 <!-- Three.js的核心五步就是:
 1.设置three.js渲染器
 2.设置摄像机camera
 3.设置场景scene
 4.设置光源light
 5.设置物体object 
 -->
 <script>
 // 1.设置three.js渲染器
 var renderer;
 function initThree(){
 width = document.getElementById("box").clientWidth;
 height = document.getElementById("box").clientHeight;
 renderer = new THREE.WebGLRenderer({
 antialias:true
 });/*生成渲染器对象(属性:抗锯齿效果为设置有效)*/
 renderer.setSize(width,height);
 document.getElementById("box").appendChild(renderer.domElement);
 /*设置canvas背景色(clearColor)和背景色透明度(clearAlpha) */
 renderer.setClearColor(0xFFFFFF,1.0);
 }
 // 2.设置摄像机camera
 var camera;
 function initCamera(){
 camera = new THREE.PerspectiveCamera(45,width/height,1,10000);
 camera.position.x = 0;
 camera.position.y = 1000;
 camera.position.z = 0;
 camera.up.x = 0;
 camera.up.y = 0;
 camera.up.z = 1;
 camera.lookAt({x:0,y:0,z:0}); //设置视野的中心坐标 
 }
 // 3.设置场景
 var scene;
 function initScene(){
 scene = new THREE.Scene();
 }
 // 4.设置光源light
 var light;
 function initLight(){
 light = new THREE.DirectionalLight(0xFF0000, 1.0, 0); //平行光
 light.position.set(100, 100, 200); //设置光源位置
 scene.add(light); //将官员添加到场景
 }
 //5.设置物体 
 var sphere;
 function initObject(){
 sphere = new THREE.Mesh(new THREE.SphereGeometry(200,200)/*设置球体的大小*/,new THREE.MeshLambertMaterial({color:0xff0000})/*设置球体的材质*/); //材质设定 
  scene.add(sphere); 
  sphere.position.set(0,0,0); /*设置物体位置*/
 } 
 //6.执行 
 function threeExcute(){ 
  initThree(); 
  initCamera(); 
  initScene(); 
  initLight(); 
  initObject(); 
  renderer.clear(); 
  renderer.render(scene,camera); 
 } 
 </script>
 <style type="text/css">
 div#box{
  border: none;
  cursor: move;
  width: 1400px;
  height: 600px;
  background-color: #EEEEEE;
  }
 </style>
 <body onload="threeExcute();">
 <div id="box"></div>
 </body>
</html>

Three.js库下载地址:http://www.bootcdn.cn/three.js/

以上内容为本文的全部介绍,希望这些内容能对您的学习或工作有所帮助,同时也欢迎继续支持本站!

作者最新文章