Three.js场景
创作时间:
作者:
@小白创作中心
Three.js场景
引用
CSDN
1.
https://m.blog.csdn.net/mmc123125/article/details/145131723
Three.js是一个基于WebGL的JavaScript库,专注于在网页中创建交互式的3D图形。虽然听起来很酷,但其实入门比你想象中容易得多!今天,我们通过三步带你创建一个简单的Three.js场景,让你零基础也能绘制一个炫酷的3D世界。
一、准备工作
在开始之前,请确保你具备以下条件:
- 基础的HTML和JavaScript知识。
- 一台能运行现代浏览器的电脑(推荐使用Chrome)。
- 一个代码编辑器(如VS Code)。
引入Three.js
有两种方法使用Three.js:
- 通过CDN引入:推荐给初学者。只需在HTML中添加以下
<script>标签即可:
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/110/three.min.js"></script>
- 通过npm安装:如果你使用模块化开发或构建工具,可以通过以下命令安装:
npm install three
二、三步搭建你的第一个场景
第1步:创建基本场景
Three.js的基本场景需要以下三大核心组件:
- 场景(Scene):这是你放置物体的地方。
- 相机(Camera):就像观众的视角,用来观察场景。
- 渲染器(Renderer):将场景和相机渲染为可在网页中显示的图像。
代码实现:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Three.js场景</title>
<style>
body { margin: 0; }
canvas { display: block; }
</style>
</head>
<body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/110/three.min.js"></script>
<script>
// 创建场景
const scene = new THREE.Scene();
// 创建相机
const camera = new THREE.PerspectiveCamera(
75, // 视角
window.innerWidth / window.innerHeight, // 宽高比
0.1, // 近剪裁面
1000 // 远剪裁面
);
camera.position.z = 5; // 设置相机离场景的距离
// 创建渲染器
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight); // 设置渲染尺寸
document.body.appendChild(renderer.domElement); // 将渲染器的canvas添加到页面
</script>
</body>
</html>
到这里,你已经创建了一个空的3D场景,但目前什么都看不到。接下来,我们会添加物体和灯光。
第2步:添加3D物体
Three.js提供了多种内置的几何体供我们使用,比如立方体、球体、平面等。你可以通过组合几何体(Geometry)和材质(Material)创建一个可视化的3D物体。
添加一个旋转的立方体:
// 创建一个立方体
const geometry = new THREE.BoxGeometry(); // 几何体
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 }); // 材质
const cube = new THREE.Mesh(geometry, material); // 网格(几何体+材质)
scene.add(cube); // 将立方体添加到场景
实现旋转效果:
// 创建动画循环
function animate() {
requestAnimationFrame(animate); // 循环调用
cube.rotation.x += 0.01; // 绕x轴旋转
cube.rotation.y += 0.01; // 绕y轴旋转
renderer.render(scene, camera); // 渲染场景
}
animate(); // 启动动画
第3步:优化场景并添加交互
为了让场景更真实,我们需要添加灯光并支持用户交互。
添加灯光
// 添加点光源
const light = new THREE.PointLight(0xffffff, 1, 100); // 点光源,白光
light.position.set(10, 10, 10); // 设置光源位置
scene.add(light); // 添加光源到场景
响应屏幕大小调整
当用户调整浏览器窗口大小时,场景也需要重新调整:
window.addEventListener('resize', () => {
camera.aspect = window.innerWidth / window.innerHeight; // 更新相机宽高比
camera.updateProjectionMatrix(); // 更新投影矩阵
renderer.setSize(window.innerWidth, window.innerHeight); // 更新渲染器尺寸
});
三、完整代码示例
以下是完整的代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Three.js场景</title>
<style>
body { margin: 0; }
canvas { display: block; }
</style>
</head>
<body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/110/three.min.js"></script>
<script>
// 创建场景
const scene = new THREE.Scene();
// 创建相机
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
camera.position.z = 5;
// 创建渲染器
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
// 添加立方体
const geometry = new THREE.BoxGeometry();
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
const cube = new THREE.Mesh(geometry, material);
scene.add(cube);
// 添加灯光
const light = new THREE.PointLight(0xffffff, 1, 100);
light.position.set(10, 10, 10);
scene.add(light);
// 动画循环
function animate() {
requestAnimationFrame(animate);
cube.rotation.x += 0.01;
cube.rotation.y += 0.01;
renderer.render(scene, camera);
}
animate();
// 响应屏幕大小调整
window.addEventListener('resize', () => {
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize(window.innerWidth, window.innerHeight);
});
</script>
</body>
</html>
四、运行效果
打开HTML文件,你会看到一个绿色的立方体在页面中旋转。如果调整窗口大小,场景也会自适应调整。
五、总结与下一步
通过以上三步,你已经学会了如何搭建一个简单的Three.js场景并实现基础动画。这只是个开始,Three.js还能帮助你实现复杂的3D模型加载、交互式动画以及更高级的特效。接下来,你可以尝试:
- 添加更多几何体(球体、平面等)。
- 加载外部3D模型(如GLTF、OBJ文件)。
- 使用鼠标或键盘与3D场景互动。
下一篇文章:Three.js光影魔术手:探索灯光与材质的魅力🚀
热门推荐
《死神》护庭十三番所有队长—斩魄刀详解!
舌头溃疡保持口腔卫生预防溃疡生长
舌头上火生疮的解决方法是什么
对联基本格式与平仄规则详解
吵一次架能气好几天:压抑自我者如何摆脱内心困局?
快充数据线升级:速度与安全的完美平衡
如何计算房屋租金?这种计算方法对租赁市场有何重要性?
人生百态,世间冷暖,老百姓自己的故事——《世间的小儿女》
深入浅出正念冥想:带你领略内心平和的秘诀
糯红高粱,宜宾的天选之子
如何让孩子快速认字
射频消融:肝血管瘤的精准治疗
汽车打火失败怎么办?五步排查教你轻松应对启动难题
以健康老龄化应对人口老龄化
如何选择适合家庭使用的家具?这些家具的设计和材质有哪些考量因素?
调制乳粉迎新国标:羊奶粉、驼奶粉奶源禁掺杂,乱象走向终结
粗细搭配:如何通过五谷杂粮实现均衡膳食
这篇指南能帮到你:人体工学椅,打造健康办公环境
【健康教育】挑选儿童牙刷有门道!不同年龄,这样选→
中国历史上的典范女性:十大贤后与四大贤母
警惕!年关将至,新型"AB贷"诈骗悄然蔓延……
麦麸皮吃了长胖吗?专家解读其营养价值与食用注意事项
印度最显赫的政治家族,尼赫鲁家族到底有多厉害?影响力难以置信
每年花费数万亿美元,美国医疗仍排名最末
最新解析:公司回购注销股票是利好还是利空,对股价有何影响?
太空中的这五具“遗体”,每位都曾为太空事业奉献一切,都有谁?你怎么看?
车漆有划痕咋办?先别急着跑4S店去喷漆,也可以用一些其他办法解决?
美国智库重磅报告:中国AI另辟蹊径,质疑大语言模型通向通用人工智能
美国寿命与健康寿命差距大,新研究惊人
更改身份证年龄需要什么手续和证件