首页
/ Threestrap项目实战:在DOM元素中创建3D立方体场景

Threestrap项目实战:在DOM元素中创建3D立方体场景

2025-07-04 17:26:49作者:柏廷章Berta

概述

本文将深入解析如何使用Threestrap框架在HTML DOM元素中创建动态3D立方体场景。Threestrap是一个轻量级的Three.js封装库,它简化了Three.js的初始化过程,使开发者能够更快速地上手3D图形开发。

环境准备

首先需要引入必要的JavaScript库:

  1. Three.js - 流行的3D图形库
  2. Threestrap - Three.js的轻量级封装

在HTML文件中通过<script>标签引入这两个库即可开始3D开发。

基础设置

创建容器元素

在HTML中定义一个<div>元素作为3D场景的容器:

<div id="three"></div>

通过CSS设置其尺寸:

#three {
  width: 500px;
  height: 500px;
}

初始化Threestrap

使用Threestrap的Bootstrap类初始化3D场景:

var three = new Threestrap.Bootstrap({
  plugins: ["core", "stats"],
  element: "#three",
});

这里配置了两个核心插件:

  • core:提供基本功能
  • stats:显示性能统计信息

3D场景构建

随机数生成器

为了实现随机分布的立方体,定义了一个伪随机数生成器:

var sd = 12345;
function rnd() {
  sd = Math.abs(Math.sin(sd * 10000) * 1000) % 1;
  return sd * 2 - 1;
}

这个生成器基于正弦函数,可以产生-1到1之间的随机数。

创建彩色立方体

定义一组颜色并创建100个随机立方体:

var colors = [
  new THREE.Color(0x3090ff),
  new THREE.Color(0x10a0ff),
  new THREE.Color(0x60109f),
];

for (var i = 0; i < 100; ++i) {
  var sz = 1 + rnd() * 0.2; // 随机大小
  var mesh = new THREE.Mesh(
    new THREE.BoxGeometry(sz, sz, sz),
    new THREE.MeshPhongMaterial({ color: colors[i % colors.length] })
  );
  mesh.position.set(rnd() * 10, rnd() * 10, rnd() * 10);
  three.scene.add(mesh);
}

每个立方体具有:

  • 随机大小(0.8-1.2倍基础尺寸)
  • 循环使用预设颜色
  • 随机位置(-10到10范围内)

光照设置

3D场景需要适当的光照才能显示立体效果:

// 半球光 - 模拟环境光
var hemiLight = new THREE.HemisphereLight(0xffffff, 0xffffff, 0.6);
hemiLight.color.setHSL(0.6, 1, 0.6);
hemiLight.groundColor.setHSL(0.095, 1, 0.75);
hemiLight.position.set(0, 500, 0);
three.scene.add(hemiLight);

// 平行光 - 模拟太阳光
var dirLight = new THREE.DirectionalLight(0xffffff, 1);
dirLight.color.setHSL(0.1, 1, 0.95);
dirLight.position.set(-1, 1.75, 1);
dirLight.position.multiplyScalar(50);
three.scene.add(dirLight);

相机动画

让相机围绕场景旋转,提供更好的3D视角:

three.on("update", function () {
  var t = three.Time.now;
  three.camera.position.set(
    -Math.cos(t) * 5,
    Math.sin(t) * 5,
    Math.sin(t * 0.718) * 5
  );
  three.camera.lookAt(new THREE.Vector3());
});

这段代码实现了:

  • 相机在XZ平面做圆周运动
  • Y轴添加额外正弦运动,增加视觉变化
  • 相机始终看向场景中心

技术要点总结

  1. Threestrap简化了Three.js的初始化:通过Bootstrap类快速创建3D场景,无需手动设置渲染器、场景、相机等基础组件。

  2. DOM集成:可以直接将3D场景嵌入到现有HTML元素中,方便与传统网页内容结合。

  3. 事件驱动:利用update事件实现动画效果,比传统的requestAnimationFrame更简洁。

  4. 光照配置:合理设置环境光和定向光对3D场景的视觉效果至关重要。

  5. 随机分布算法:展示了如何创建视觉上自然分布的3D对象。

这个示例展示了Threestrap的核心优势 - 让开发者专注于3D内容的创作,而不是繁琐的初始化配置。通过这种方式,即使是3D开发新手也能快速创建出专业级的3D场景。

登录后查看全文
热门项目推荐

项目优选

收起