Three.js中文网 Three.js中文网
首页
免费视频
系统课 (opens new window)
  • Three.js基础课程
  • Vue3+Threejs 3D可视化
  • Threejs进阶课程
  • 展厅3D预览漫游
  • Threejs Shader
  • Blender建模基础
  • Three.js基础课程(旧版本) (opens new window)
  • 文章
WebGPU教程
  • WebGL教程
  • WebGL教程(旧版本) (opens new window)
3D案例
  • 本站部署(打开快) (opens new window)
  • 原英文官网文档 (opens new window)
首页
免费视频
系统课 (opens new window)
  • Three.js基础课程
  • Vue3+Threejs 3D可视化
  • Threejs进阶课程
  • 展厅3D预览漫游
  • Threejs Shader
  • Blender建模基础
  • Three.js基础课程(旧版本) (opens new window)
  • 文章
WebGPU教程
  • WebGL教程
  • WebGL教程(旧版本) (opens new window)
3D案例
  • 本站部署(打开快) (opens new window)
  • 原英文官网文档 (opens new window)
Web3D系统课程视频
  • 0.学前说明

  • 1.Vue+Three.js基础

    • 1. Vite搭建Vue 3D开发环境
    • 2. Vite+Vue3引入threejs库
    • 3. Vue+threejs 3D案例—场景
      • 4. Vue+threejs 3D案例—相机
      • 5. Vue+threejs 3D案例—渲染器
      • 6. 动画渲染循环
      • 7. 平行光光源与材质
      • 8. 相机控件OrbitControls
      • 9. 渲染器设置(全屏、锯齿等)
      • 10. Canvas插入vue3组件(ref方式)【选修】
    • 2.场景搭建Three+Blender

    • 3.渲染效果提升(材质光照)

    • 4.渲染性能、模型压缩

    • 5.封装、进度条、切视角

    • js 3D可视化
    • 1.Vue+Three.js基础
    郭隆邦
    2024-03-06
    目录

    3. Vue+threejs 3D案例—场景

    # Vue+threejs第一个3D案例—场景

    接下来会通过3小节,实现Vue3+threejs的第一个3D案例。

    # Canvas画布

    Canvas画布和div、p元素一样都是HTML元素,区别在于Canvas画布支持2D或3D绘图功能,threejs渲染的三维效果图就是呈现在Canvas画布上面。

    网页上插入一个Cnavas画布,宽高800x800像素px,背景黑色。

    <canvas style="background: black;" width="800" height="800"></canvas>
    

    除了标签,也可以通过js代码创建canvas画布,下面通过js方式在twin.js文件中创建一个Canvas元素,并插入body中。

    const canvas = document.createElement('canvas');
    canvas.width=800;//画布宽度px
    canvas.height=800;//画布高度px
    canvas.style.background='black';
    document.body.appendChild(canvas);
    

    # 创建三维场景Scene

    你可以把三维场景Scene (opens new window)对象理解为虚拟的3D场景,用来表示模拟生活中的真实三维场景,或者说三维世界。

    // 创建3D场景对象Scene
    const scene = new THREE.Scene();
    

    # Threejs三维坐标系

    Threejs三维场景Scene里面的物体,默认通过三维直角坐标系(三维笛卡尔坐标系)去定位。关于3D坐标系,你有初高中数学基础,都了解,就不做过多介绍,只是提醒下大家,写threejs代码时候要有坐标位置的概念。

    你可以想象下,在threejs的Canvas画布上有一个虚拟的xyz直角坐标系,在线体验 (opens new window)加深印象。

    【扩展】:Three.js默认坐标系一个右手坐标系 (opens new window),假设y默认轴向上,当x轴水平向右时候,此时z轴垂直屏幕向外。

    # 创建一个长方体物体

    下面用4步,给大家演示在虚拟场景Scene中添加一个长方体。

    //1. 长方体形状
    const geometry = new THREE.BoxGeometry(100, 100, 100); 
    //2. 长方体材质
    const material = new THREE.MeshBasicMaterial({
        color: 0x0000ff,
    }); 
    //3. 长方体网格模型Mesh
    const mesh = new THREE.Mesh(geometry, material);
    //4. 长方体添加到虚拟场景中
    scene.add(mesh);
    

    # 1. 物体形状:几何体Geometry

    //创建一个长方体几何对象Geometry
    // 三个三叔表示长方体长宽高,再具体点就是x、y、z轴三个方向的尺寸
    const geometry = new THREE.BoxGeometry(100, 100, 100); 
    

    Three.js提供了各种各样的几何体API,用来表示三维物体的几何形状。

    文档搜索关键词geometry你可以看到threejs提供各种几何体相关API,具体使用方法,也可以参考文档。

    # 2. 物体外观:材质Material

    如果你想定义物体的外观效果,比如颜色,就需要通过材质Material相关的API实现,threejs材质不同,渲染效果不同。

    下面给大家选择一个最简单的网格材质,基础基础材质MeshBasicMaterial (opens new window)是threejs最简单的网格材质,下面给大家实现一个蓝色材质效果。

    //创建一个材质对象Material
    const material = new THREE.MeshBasicMaterial({
        color: 0x0000ff,//0x0000ff:十六进制表示的蓝色
    }); 
    

    # 3. 物体:网格模型Mesh

    实际生活中有各种各样的物体,在threejs中可以通过网格模型Mesh (opens new window)表示一个虚拟的物体,比如一个箱子、一个鼠标。

    const geometry = new THREE.BoxGeometry(100, 100, 100); 
    const material = new THREE.MeshBasicMaterial({
        color: 0x0000ff,//0x0000ff:十六进制表示的蓝色
    }); 
    // 两个参数分别为几何体geometry、材质material
    const mesh = new THREE.Mesh(geometry, material); //网格模型对象Mesh
    

    # 4. .add()方法

    在threejs中你创建了一个表示物体的虚拟对象Mesh,需要通过.add()方法,把网格模型mesh添加到三维场景scene中。

    scene.add(mesh); 
    

    # 模型位置.position

    实际生活中,一个物体往往是有位置的,对于threejs而言也是一样的,你可以通过位置属性.position定义网格模型Mesh在三维场景Scene中的位置。

    长方体位置默认是在坐标原点 (opens new window)(0,0,0)。

    // 长方体位置默认是在坐标原点(0,0,0)
    const geometry = new THREE.BoxGeometry(100, 100, 100); 
    const material = new THREE.MeshBasicMaterial({
        color: 0x0000ff,
    }); 
    const mesh = new THREE.Mesh(geometry, material);
    scene.add(mesh);
    

    把长方体位置设置在x轴坐标200位置 (opens new window)。

    const mesh = new THREE.Mesh(geometry, material); //网格模型对象Mesh
    //设置网格模型在三维空间中的位置坐标,默认是坐标原点
    mesh.position.set(0,200,0);//y轴200位置
    mesh.position.set(200,0,0);//x轴200位置
    

    # 继续下节课

    这时候,你可能想在Canvas画布上看到,你写的长方体效果。不要急,不要躁,后面两节马上到。

    2. Vite+Vue3引入threejs库
    4. Vue+threejs 3D案例—相机

    ← 2. Vite+Vue3引入threejs库 4. Vue+threejs 3D案例—相机→

    Theme by Vdoing | Copyright © 2016-2025 豫ICP备16004767号-2
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式