使用Three.js创建WebGL交互式场景

灵魂的音符 2021-09-01 ⋅ 24 阅读

Three.js

导语

WebGL是一种在网页上渲染3D图形的技术,而Three.js是一个基于WebGL的JavaScript库。Three.js简化了在网页上创建和展示3D场景的过程,通过提供易于使用的API和许多有用的功能,使得创建交互式3D场景变得更加容易。本文将介绍如何使用Three.js创建一个简单的WebGL交互式场景。

准备工作

在开始之前,我们需要准备以下内容:

  1. 一个基本的HTML文件,用于承载我们的Three.js场景。
  2. 下载并引入Three.js库。

你可以通过以下链接下载Three.js库:https://github.com/mrdoob/three.js

将下载的文件解压并将其放置在你的工程目录中,然后在HTML文件的<head>标签内添加以下代码来引入Three.js库:

<script src="path/to/three.min.js"></script>

创建一个基本的场景

现在,我们将创建一个基本的场景。在HTML文件的<body>标签内添加一个具有指定ID的<div>元素用于承载Three.js场景:

<div id="scene-container"></div>

然后,在HTML文件的<script>标签内添加以下代码来创建并渲染Three.js场景:

// 获取用于渲染场景的容器元素
const container = document.getElementById('scene-container');

// 创建场景
const scene = new THREE.Scene();

// 创建相机
const camera = new THREE.PerspectiveCamera(75, container.clientWidth / container.clientHeight, 0.1, 1000);
camera.position.z = 5;

// 创建渲染器
const renderer = new THREE.WebGLRenderer();
renderer.setSize(container.clientWidth, container.clientHeight);

// 将渲染器的输出添加到容器元素中
container.appendChild(renderer.domElement);

// 渲染场景
renderer.render(scene, camera);

现在,你应该能看到一个黑色的画布,这便是我们的基本场景的起点。

添加一个立方体

让我们将一个简单的立方体添加到我们的场景中。在HTML文件的<script>标签内添加以下代码:

// 创建几何体(立方体)
const geometry = new THREE.BoxGeometry(1, 1, 1);

// 创建材质
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;
    cube.rotation.y += 0.01;

    // 渲染场景
    renderer.render(scene, camera);
}
animate();

现在,刷新你的页面,你应该能看到一个绿色的旋转立方体!你可以通过修改rotation属性的值来控制立方体的旋转速度和方向。

添加交互功能

Three.js还允许我们为场景添加交互功能,例如,鼠标点击和移动事件。让我们为立方体添加一个点击事件来改变其颜色。

在HTML文件的<script>标签内,将上述添加立方体的代码替换为以下代码:

// 创建几何体(立方体)
const geometry = new THREE.BoxGeometry(1, 1, 1);

// 创建材质
const material = new THREE.MeshBasicMaterial({
    color: 0x00ff00
});

// 创建立方体网格
const cube = new THREE.Mesh(geometry, material);

// 将立方体添加到场景中
scene.add(cube);

// 监听鼠标点击事件
window.addEventListener('click', onDocumentMouseDown, false);

// 响应鼠标点击事件
function onDocumentMouseDown(event) {
    // 获取鼠标点击坐标
    const mouse = new THREE.Vector2(
        (event.clientX / container.clientWidth) * 2 - 1,
        - (event.clientY / container.clientHeight) * 2 + 1
    );

    // 通过射线检测鼠标点击位置是否与立方体相交
    const raycaster = new THREE.Raycaster();
    raycaster.setFromCamera(mouse, camera);
    const intersects = raycaster.intersectObjects(scene.children);

    // 如果相交了立方体,改变立方体的颜色
    if (intersects.length > 0) {
        intersects[0].object.material.color.set(0xff0000);
    }
}

// 更新场景
function animate() {
    requestAnimationFrame(animate);

    // 旋转立方体
    cube.rotation.x += 0.01;
    cube.rotation.y += 0.01;

    // 渲染场景
    renderer.render(scene, camera);
}
animate();

现在,刷新你的页面,你应该能看到一个旋转的立方体。当你点击立方体时,它将变为红色!

结语

通过上述步骤,我们已经创建了一个使用Three.js创建的WebGL交互式场景。通过Three.js的强大功能,你可以进一步添加更多对象、灯光和材质,以创建更复杂的3D场景。希望本文对你开始使用Three.js创建WebGL场景有所帮助!


全部评论: 0

    我有话说: