返回

Three.js 进阶之旅:基础入门(下)

前端

续接上文

在上一篇文章中,我们已经完成了一个简单的 Three.js 3D 页面,其中包含一个球体和一个立方体。我们还了解了如何使用 Three.js 的基本 API 来创建场景、网格和材质。在本文中,我们将继续深入 Three.js,学习更高级的知识,例如如何添加纹理、灯光、阴影和相机。

继续深入 Three.js

1. OrbitControls

OrbitControls 是一个 Three.js 的插件,它可以让你轻松地控制摄像机的位置和旋转。它非常适合用于创建交互式 3D 场景。要使用 OrbitControls,首先你需要将其安装到你的项目中。你可以通过 npm 或 yarn 来安装它:

npm install three-orbitcontrols
yarn add three-orbitcontrols

安装完成后,你就可以在你的代码中使用 OrbitControls 了。首先,你需要创建一个新的 OrbitControls 实例:

const controls = new OrbitControls(camera, renderer.domElement);

然后,你需要将 controls 添加到你的场景中:

scene.add(controls);

最后,你需要在你的渲染循环中更新 controls:

controls.update();

2. 纹理贴图

纹理贴图可以用来给你的 3D 模型添加更多的细节。要使用纹理贴图,首先你需要创建一个新的纹理对象:

const texture = new THREE.TextureLoader().load('path/to/texture.png');

然后,你需要将纹理对象应用到你的材质上:

const material = new THREE.MeshBasicMaterial({ map: texture });

最后,你需要将材质应用到你的网格上:

const geometry = new THREE.BoxGeometry(1, 1, 1);
const mesh = new THREE.Mesh(geometry, material);

3. 着色器

着色器可以用来创建更复杂的材质。要使用着色器,首先你需要创建一个新的着色器对象:

const vertexShader = `
    void main() {
        gl_Position = projectionMatrix * modelViewMatrix * position;
    }
`;

const fragmentShader = `
    void main() {
        gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
    }
`;

然后,你需要将着色器对象应用到你的材质上:

const material = new THREE.ShaderMaterial({
    vertexShader: vertexShader,
    fragmentShader: fragmentShader
});

最后,你需要将材质应用到你的网格上:

const geometry = new THREE.BoxGeometry(1, 1, 1);
const mesh = new THREE.Mesh(geometry, material);

4. 点光源和聚光灯

点光源和聚光灯可以用来给你的场景添加灯光。要使用点光源,首先你需要创建一个新的点光源对象:

const pointLight = new THREE.PointLight(0xffffff, 1, 100);

然后,你需要将点光源对象添加到你的场景中:

scene.add(pointLight);

要使用聚光灯,首先你需要创建一个新的聚光灯对象:

const spotLight = new THREE.SpotLight(0xffffff, 1, 100);

然后,你需要将聚光灯对象添加到你的场景中:

scene.add(spotLight);

5. 阴影

阴影可以用来给你的场景添加更多的真实感。要使用阴影,首先你需要创建一个新的阴影贴图对象:

const shadowMap = new THREE.WebGLRenderTarget(1024, 1024);

然后,你需要创建一个新的阴影材质对象:

const shadowMaterial = new THREE.ShadowMaterial();

最后,你需要将阴影材质对象应用到你的网格上:

mesh.material = shadowMaterial;

6. 相机

相机用于控制你看到场景的角度。要使用相机,首先你需要创建一个新的相机对象:

const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);

然后,你需要将相机对象添加到你的场景中:

scene.add(camera);

7. 动画

动画可以用来让你的场景动起来。要使用动画,首先你需要创建一个新的动画器对象:

const animator = new THREE.AnimationMixer(scene);

然后,你需要创建一个新的动画动作对象:

const animationAction = animator.clipAction(clip);

最后,你需要播放动画动作对象:

animationAction.play();

8. 交互

交互可以用来让你的用户与你的场景进行互动。要使用交互,首先你需要创建一个新的事件侦听器对象:

const listener = new THREE.EventListener();

然后,你需要将事件侦听器对象添加到你的场景中:

scene.addEventListener('click', listener);

最后,你需要在你的事件侦听器对象中定义一个回调函数:

listener.on('click', function(event) {
    console.log('The scene was clicked!');
});

结语

在本系列文章的两部分中,我们已经详细介绍了 Three.js 的基本知识,包括场景、网格、材质、灯光、阴影、相机、动画和交互。这些知识足以让你创建简单的 Three.js 3D 页面了。如果你想学习更多关于 Three.js 的知识,你可以参考官方文档或其他在线教程。