使用 Three.js 和 WebGL 构建交互式 3D 图形应用程序


WebGL,或 Web 图形库,是一个强大的 JavaScript API,允许开发人员在 Web 浏览器中创建交互式 3D 图形。借助 Three.js 等库,开发人员可以利用 WebGL 的功能在 Web 上构建令人惊叹的视觉体验。在本文中,我们将探讨 WebGL 的基础知识,并学习如何使用 Three.js 和 JavaScript 创建交互式 3D 图形。

了解 WebGL

WebGL 是一个基于 OpenGL ES 的低级 JavaScript API,OpenGL ES 是一个广泛用于在嵌入式系统上渲染 2D 和 3D 图形的标准。WebGL 将硬件加速图形的功能引入 Web,使开发人员能够创建沉浸式体验,而无需插件或其他软件。

WebGL 的关键功能之一是能够利用用户设备的 GPU(图形处理单元)来执行复杂的计算和渲染任务。这允许实时渲染高质量的 3D 图形,使 WebGL 成为游戏、数据可视化和虚拟现实体验等应用程序的理想选择。

Three.js 简介

Three.js 是一个流行的 JavaScript 库,它简化了使用 WebGL 的过程。它在原始 WebGL API 上提供了更高级别的抽象,从而更容易创建和操作 3D 对象、应用纹理和材质、处理用户交互以及执行动画。

要开始使用 Three.js,您需要使用 <script> 标签将库包含在 HTML 文件中。您可以从官方 Three.js 网站下载库,或从 CDN(内容分发网络)包含它。让我们来看一个使用 Three.js 创建 3D 立方体的简单示例

要开始使用 Three.js,我们需要设置场景、摄像机和渲染器。以下示例演示了基本设置并为 3D 对象设置动画

示例

<!DOCTYPE html>
<html>
<head>
   <script src="https://threejs.org/build/three.min.js"></script>
   <style>
      body { margin: 0; }
      canvas { display: block; }
   </style>
</head>
<body>
   <script>
      document.addEventListener('DOMContentLoaded', function() {
         // Set up the scene
         const scene = new THREE.Scene();
    
         // Set up the camera
         const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
         camera.position.z = 5;
    
         // Set up the renderer
         const renderer = new THREE.WebGLRenderer({ antialias: true });
         renderer.setSize(window.innerWidth,    window.innerHeight);
         document.body.appendChild(renderer.domElement);
    
         // Create a geometry (e.g., a cube)
         const geometry = new THREE.BoxGeometry();
         const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
         const cube = new THREE.Mesh(geometry, material);
         scene.add(cube);
    
         // Animation loop
         function animate() {
            requestAnimationFrame(animate);
            cube.rotation.x += 0.01;
            cube.rotation.y += 0.01;
            renderer.render(scene, camera);
         }
    
         // Start the animation loop
         animate();
      });
   </script>
</body>
</html>

说明

在上面的代码中,我们首先使用适当的 Three.js 类设置场景、摄像机和渲染器。我们创建一个透视摄像机,并将其放置在 3D 空间中的 (0, 0, 5) 位置。渲染器设置为使用 WebGL 进行渲染,并附加到 HTML body。

接下来,我们通过定义其几何形状和材质来创建一个立方体。使用 add 方法将立方体添加到场景中。

然后,我们定义一个 animate 函数,该函数将被递归调用以创建动画循环。在函数内部,我们更新立方体在 X 和 Y 轴上的旋转。最后,我们使用渲染器的 render 方法使用摄像机渲染场景。

以上代码将在屏幕上渲染一个旋转的 3D 立方体。您可以修改立方体的属性和动画逻辑以创建各种 3D 效果。

探索 Three.js 功能

Three.js 提供了广泛的功能和实用程序来创建复杂的 3D 图形。让我们探索一些最常用的功能,并了解它们的实际应用。

灯光和阴影

灯光对于创建逼真且视觉上吸引人的 3D 场景至关重要。Three.js 支持各种类型的灯光,例如环境光、方向光、点光源和聚光灯。可以对这些灯光进行定位、着色和控制以获得所需的照明效果。

请考虑以下所示的代码。

// Set up the light
const light = new THREE.PointLight(0xffffff, 1);
light.position.set(5, 5, 5);
scene.add(light);

// Enable shadows
renderer.shadowMap.enabled = true;
cube.castShadow = true;

说明

在此示例中,我们创建了一个点光源并将其放置在场景中。灯光的颜色设置为白色(十六进制代码 0xffffff),强度为 1。然后我们将灯光添加到场景中。

要启用阴影,我们需要将 renderer.shadowMap.enabled 设置为 true。此外,我们将 cube.castShadow 设置为 true 以指示立方体应该投射阴影。

纹理和材质

纹理和材质为 3D 对象添加视觉细节。Three.js 支持各种类型的材质,包括基本材质、Lambert 材质、Phong 材质等。这些材质可以与纹理结合使用以创建逼真的表面。

请考虑以下所示的代码。

// Load the texture
const textureLoader = new THREE.TextureLoader();
const texture = textureLoader.load('texture.jpg');

// Create the material
const material = new THREE.MeshPhongMaterial({ map: texture });

说明

在此示例中,我们使用 TextureLoader 类从图像文件加载纹理。然后将纹理分配给 MeshPhongMaterial 的 map 属性,该属性创建一个对灯光做出反应的光泽材质。

结论

WebGL 结合 Three.js 等库的强大功能和简单性,为在 Web 上创建交互式 3D 图形开辟了无限可能。在本文中,我们介绍了 WebGL 的基础知识,介绍了 Three.js 库,并探讨了其一些功能,包括创建对象、应用材质和纹理以及处理用户交互。

随着您深入研究 WebGL 和 Three.js,您将发现各种可能性,从复杂的游戏开发到沉浸式的虚拟现实体验。

更新于: 2023年7月24日

421 次浏览

启动您的 职业生涯

通过完成课程获得认证

开始
广告