1.1 Three.js 基础

前言

在开始之前,让我们尝试让您了解Three.js应用程序的结构。Three.js应用程序需要您创建一堆对象并将其连接在一起。这是代表一个小three.js应用程序的图
在这里插入图片描述

关于上图的注意事项,在浏览器中渲染一个three.js必不可少的几个对象Renderer,Scene,Camera

  • Renderer, 是一个主要对象,可以将Scene和Camera对象传给Renderer对象,它可以将场景渲染到canvas画布上。
  • Scene是一个树状结构的,可以包含多个对象Light,Group,Object3D,Camera
  • Camera在场景中起到的作用较特殊,我们在网页上看到的是Camera看到的
  • Mesh 是一个网格模型的对象,里面包含Geometry对象和Material对象
  • Geometry 是Mesh的网格模型的具体的外观的对象,例如正方形,原型,长方形等。
  • Material 是Mesh的材质对象,可以给Mesh添加材质颜色,贴图等。
  • Texture 是Material 的 特图文件 可以为Material加载贴图
  • Light 是灯光,例如环境光,点光源,聚光灯等。

案例地址

代码案例地址

全部代码

现在我们来写一个Hello three.js

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--第二步创建一个canvas标签-->
<canvas id="canvas"></canvas>
</body>
<script type="module"> // 这里type的属性为module
// 第一步导入three.js
import * as THREE from '../../../three.js-r115/build/three.module.js'; // 导入three.js

(function main() {
    // 第三步创建一个加载器
    let canvas = document.getElementById('canvas');
    let renderer = new THREE.WebGLRenderer({canvas});

    // 第四步创建一个相机
    let fov = 75, aspect = 2, near = 0.1, far = 5;
    let camera = new THREE.PerspectiveCamera(fov, aspect, near, far);
    camera.position.z = 2
    // 第五步创建一个场景
    let scene = new THREE.Scene();

    // 添加一个光源
    let light = new THREE.DirectionalLight(0xFFFFFF, 1);
    light.position.set(-1, 2, 4);
    scene.add(light);

    // 创建一个模型
    let width = 1, height = 1, depth = 1;
    let geometry = new THREE.BoxGeometry(width, height, depth);

    // let material = new THREE.MeshBasicMaterial({color: 0xFF0000}); // 不受光照影响的材质
    // let material = new THREE.MeshLambertMaterial({color: 0xFF0000}); // 受光照影响的材质---不加光看不见
    let material = new THREE.MeshPhongMaterial({color: 0xFF0000}); // 受光照影响的材质---不加光看不见

    let mesh = new THREE.Mesh(geometry, material);
    mesh.position.setX(0)
    let mesh2 = new THREE.Mesh(geometry, material); // 引用相同的geometry, material
    mesh2.position.setX(-2)
    let mesh3 = new THREE.Mesh(geometry, material); // 引用相同的geometry, material
    mesh3.position.setX(2)

    // 将模型添加到场景中
    scene.add(mesh)
    scene.add(mesh2)
    scene.add(mesh3)

    // 最后一步渲染
    function render() {
        // 让场景动起来
        mesh.rotateY(0.01)
        mesh.rotateZ(0.01)
        mesh2.rotateY(0.02)
        mesh2.rotateZ(0.02)
        mesh3.rotateY(0.03)
        mesh3.rotateZ(0.03)
        requestAnimationFrame(render) // 自动循环调用render不要自己写定时器调用
        renderer.render(scene, camera)
    }

    render()
})()
</script>
</html>
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

淋雨一直走~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值