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.Three.js快速入门

  • 2.几何体BufferGeometry

  • 3.模型对象、材质

  • 4.层级模型

  • 5.顶点UV坐标、纹理贴图

  • 6.加载外部三维模型(gltf)

  • 7.PBR材质与纹理贴图

  • 8.渲染器和前端UI界面

  • 9.生成曲线、几何体

  • 10.相机基础

  • 11.光源和阴影

  • 12.精灵模型Sprite

    • 1. 精灵模型Sprite
      • 2. 精灵模型标注场景(贴图)
      • 3. Sprite模拟下雨、下雪
    • 13.后处理EffectComposer

    • 14.射线拾取模型

    • 15.场景标注标签信息

    • 16.关键帧动画

    • 17.动画库tween.js

    • Three.js教程
    • 12.精灵模型Sprite
    郭隆邦
    2023-02-25
    目录

    1. 精灵模型Sprite

    # 精灵模型Sprite

    Three.js的精灵模型Sprite和Threejs的网格模型Mesh一样都是模型对象,父类都是Object3D,关于精灵模型对象Sprite的方法和属性除了可以查看文档Sprite,也可以查看父类Object3D。

    第一次接触精灵模型Sprite的时候,可以类比以前讲解过的网格模型Mesh学习。

    # 创建精灵模型材质SpriteMaterial

    精灵材质对象SpriteMaterial和普通的网格材质一样可以设置颜色.color、颜色贴图.map、开启透明.transparent、透明度.opacity等属性,精灵材质对象SpriteMaterial的父类是材质Material。

    // 创建精灵材质对象SpriteMaterial
    const spriteMaterial = new THREE.SpriteMaterial({
      color:0x00ffff,//设置颜色
    });
    

    # 创建精灵模型Sprite

    创建精灵模型对象Sprite和创建网格模型对象一样需要创建一个材质对象,不同的地方在于创建精灵模型对象不需要创建几何体对象Geometry。

    // 创建精灵模型对象,不需要几何体geometry参数
    const sprite = new THREE.Sprite(spriteMaterial);
    
    const mesh = new THREE.Mesh(geometry, material);
    

    精灵模型Sprite默认是一个矩形形状,默认长宽都是1,默认在坐标原点位置。Sprite默认尺寸为1,如果你在画布上看不太清,可以适当调整相机参数。

    对于透视投影相机而言,Sprite和Mesh一样遵循远小近大的投影规律。

    # 正投影相机验证Sprite尺寸

    Sprite默认尺寸是1,如果正投影相机对象的top, bottom范围分别为0.5,-0.5,上下方向渲染范围是1,精灵模型默认尺寸长宽都是1,这样刚好上下方向100%填充画布。

    const s = 0.5;//控制left, right, top, bottom范围大小
    const camera = new THREE.OrthographicCamera(-s * k, s * k, s, -s, 1, 8000);
    

    # 对比Sprite和矩形平面Mesh

    Sprite形状是矩形,PlaneGeometry创建的网格模型Mesh的形状也是矩形。

    Sprite与矩形平面Mesh的区别在于,当你旋转三维场景的时候,如果通过相机控件OrbitControls旋转测试,你可以发现Sprite矩形平面会始终平行于Canvas画布或者说屏幕,而矩形平面Mesh的姿态角度会跟着旋转,不一定平行于canvas画布。

    # Sprite属性.position、.scale

    精灵模型Sprite和Mesh一样具有位置.position和缩放.scale属性。

    sprite.scale只需要设置x、y两个分量就可以,z方向默认值就行。

    // 控制精灵大小
    console.log('sprite.scale',sprite.scale);
    sprite.scale.set(50, 25, 1); //只需要设置x、y两个分量就可以
    

    sprite.position设置精灵模型在三维空间中的位置坐标

    sprite.position.set(0,50,0);
    

    # 对比尺寸相同Spirte和矩形平面Mesh

    对于网格模型Mesh而言,可以通过几何体geometry和mesh.scale定义尺寸,Spirte没有几何体,需要通过sprite.scale定义矩形精灵的长和宽。

    打开案例源码“3.对比相同尺寸Sprite和矩形Mesh”,对比相同尺寸Spirte和矩形平面Mesh渲染效果,进一步掌握Sprite尺寸定义。

    // 尺寸相同的Sprite和矩形平面Mesh
    const sprite = new THREE.Sprite(spriteMaterial);
    sprite.scale.set(50, 25, 1);
    const geometry = new THREE.PlaneGeometry(50, 25);
    const mesh = new THREE.Mesh(geometry, material);
    

    # SpriteMaterial旋转属性.rotation

    精灵材质SpriteMaterial的属性除了和网格材质类似的属性和方法外,还有一些自己独特的方法和属性,比如.rotation旋转精灵模型,更多相关属性和方法可以查看threejs文档关于SpriteMaterial的介绍。

    const spriteMaterial = new THREE.SpriteMaterial({
      rotation:Math.PI/4,//旋转精灵对象45度,弧度值
    });
    
    8. gui辅助调节光源阴影
    2. 精灵模型标注场景(贴图)

    ← 8. gui辅助调节光源阴影 2. 精灵模型标注场景(贴图)→

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