首页
/ 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场景。

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

热门内容推荐

最新内容推荐

项目优选

收起
docsdocs
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
139
1.91 K
kernelkernel
deepin linux kernel
C
22
6
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
8
0
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
192
273
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
923
551
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
421
392
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
145
189
金融AI编程实战金融AI编程实战
为非计算机科班出身 (例如财经类高校金融学院) 同学量身定制,新手友好,让学生以亲身实践开源开发的方式,学会使用计算机自动化自己的科研/创新工作。案例以量化投资为主线,涉及 Bash、Python、SQL、BI、AI 等全技术栈,培养面向未来的数智化人才 (如数据工程师、数据分析师、数据科学家、数据决策者、量化投资人)。
Jupyter Notebook
74
64
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
344
1.3 K
easy-eseasy-es
Elasticsearch 国内Top1 elasticsearch搜索引擎框架es ORM框架,索引全自动智能托管,如丝般顺滑,与Mybatis-plus一致的API,屏蔽语言差异,开发者只需要会MySQL语法即可完成对Es的相关操作,零额外学习成本.底层采用RestHighLevelClient,兼具低码,易用,易拓展等特性,支持es独有的高亮,权重,分词,Geo,嵌套,父子类型等功能...
Java
36
8