Three.js-硬要自学系列5 (顶点位置数据和点模型、线模型、网格模型)

本章主要学习知识点

  • 了解几何体的顶点位置数据,使用点模型标注顶点位置
  • 使用线模型在场景中绘制线条
  • 了解什么是网格模型,并呈现模型

顶点位置数据和点模型

数据特点

  • 顺序性:顶点数据按顺序排列,每三个数值定义一个顶点
  • 灵活性:支持自定义任意数量的顶点,可创建不规则几何体
  • 优化特性 :通过顶点索引(geometry.index) 可复用顶点,减少内存占用

设置顶点数据

js 复制代码
// 创建一个BufferGeometry对象
const geometry = new THREE.BufferGeometry();
// 创建顶点数据
const vertices = new Float32Array([
  0, 0, 0, //顶点1坐标
  2, 0, 0, //顶点2坐标
  0, 4, 0, //顶点3坐标
  0, 0, 0, //顶点4坐标
  0, 0, 4, //顶点5坐标
  2, 0, 0, //顶点6坐标
])
// 设置几何体顶点数据
geometry.setAttribute('position',new THREE.BufferAttribute(vertices,3))

点模型

点模型用于将几何体的每个顶点渲染为独立点状对象

使用过程中需注意

  • 每个顶点对应一个可视化点
  • 支持通过材质控制点的大小、颜色等属性
  • 适用于粒子系统、星空效果等场景

添加点模型,并绑定顶点数据

js 复制代码
// 创建点模型材质
const material = new THREE.PointsMaterial({
  color:'deepskyblue', // 线条颜色
  size:0.4   // 点的大小
})
// 创建点模型
point = new THREE.Points(geometry,material)
// 添加到场景
scene.add(point)

我们设置了6组顶点数据,对应的应该在场景中显示6个点模型,但从上图可以看到只有4个这是因为顶点1和顶点4,以及顶点2和顶点6是重叠的,因此场景中只显示4个点模型,实际上是渲染了6个

尝试动态修改顶点位置我们就能发现它们

线模型

three.js 中的线模型用于通过顶点数据绘制连续的线段或闭合线条,主要包含以下类型:

  • Line:依次连接几何体的顶点数据,形成连续线段(不闭合)。
  • LineLoop :在 Line 基础上将首尾顶点连接,形成闭合线条。
  • LineSegments:每两个顶点绘制一条独立线段,顶点不共享(如绘制点阵结构)。

使用场景

  • 路径可视化:地图导航路线、运动轨迹
  • 结构展示:建筑框架、分子模型
  • 艺术效果:动态光流、抽象线条动画
  • 辅助调试 :显示模型三角面片分布(通过设置 mesh.material.wireframe = true)

关于线模型的材质

  • 基础材质: LineBasicMaterial(支持颜色、透明度等)
  • 虚线材质:LineDashedMaterial

创建线模型,使用基础材质,lineLoop闭合线条

js 复制代码
    const geometry = new THREE.BufferGeometry()
    // 创建顶点数据
    const vertices = new Float32Array([
      0, 0, 0, //顶点1坐标
      2, 0, 0, //顶点2坐标
      0, 4, 0, //顶点3坐标
      0, 0, 0, //顶点4坐标
      0, 0, 4, //顶点5坐标
      2, 0, 0, //顶点6坐标
    ])
    // 设置几何体顶点数据
    geometry.setAttribute('position',new THREE.BufferAttribute(vertices,3))
    // 创建线材质
    const material = new THREE.LineBasicMaterial({color:'deepskyblue'})
    // 创建线模型对象
    // 闭合
    let line = new THREE.LineLoop(geometry,material)

网格模型

网格模型通过将几何体(Geometry)与材质(Material)结合,用于构建具有复杂表面的三维物体,其具有以下几个特点

  • 三角形面片渲染:默认将几何体顶点数据分割为三角形面片进行渲染,每个三角形由三个顶点组成
  • 正反面区分:通过顶点排列顺序(逆时针为正面,顺时针为反面)控制可见性,默认仅渲染正面
  • 材质支持 :支持多种材质类型(如 MeshBasicMaterial、MeshPhongMaterial 等),可定义颜色、纹理、光照响应等特性

使用场景

  • 静态物体:建筑、机械零件等表面规则的物体
  • 动态形变:通过修改顶点数据实现网格变形(如布料模拟)
  • 复杂结构:通过组合多个网格模型构建层级化对象(如机器人关节)

通过wireframe: true开启线框模式

js 复制代码
// 创建球体
const geometry = new THREE.SphereGeometry(1,20,20)
// 创建材质
const material = new THREE.MeshBasicMaterial({ color: 'deepskyblue', wireframe: true })
// 创建网格模型
cube = new THREE.Mesh(geometry,material)
// 添加到场景
scene.add(cube)

效果图

三种模型之间对比

模型类型 特点 适用场景
点模型(Points) 独立显示每个顶点 粒子系统、星空效果
线模型(Line) 顶点按顺序连接成线 路径可视化、结构框架
网格模型(Mesh) 顶点组合形成三角面 实体模型、复杂表面

以上案例均可在案例中心查看体验

THREE 案例中心

相关推荐
变与不变8063 小时前
jQuery怎么使用
前端·javascript
神膘护体小月半3 小时前
flex 布局的 order 属性
前端·css
paopaokaka_luck3 小时前
流浪动物救助与收养系统(DeepSeek AI对话、 ECharts多维分析、救助流程衔接、领养与回访衔接、 捐赠确认与公示、志愿者协作)
java·前端·javascript·人工智能·mysql·echarts·推荐算法
仰望.3 小时前
vue 表格组件 vxe-table 树表格懒加载支持拖拽排序的详细用法
前端·javascript·vue.js·vxe-table
前端 贾公子3 小时前
vite-plugin-uni-manifest 升级指南
前端
小码哥_常3 小时前
iPhone 用户传了张 HEIC,我的前端崩了
前端
小码哥_常3 小时前
你发的原图可能暴露你家地址——聊聊图片 EXIF 隐私
前端
java1234_小锋3 小时前
【技术专题】CSS3 网页技术 - CSS3 优先级
前端·css·css3
鸿蒙开发5 小时前
共享 Schema 与 SchemaFactory
前端·后端·harmonyos
屏什么录5 小时前
录屏超过两小时就卡顿崩盘?从参数调优到代码实现,一文彻底搞定长时间录屏
前端·音视频开发