【WebGL-iTwin.js】理论篇(一):webgl中三维模型表示方式-多边形网格

一、三维模型表示方式

在计算机图形学中,三维模型一般是指空间中物理实体对象的数学表示。具体说来,三维模型是由其形状颜色外观的描述构成。通常,三维对象的表示方法可以分为面表示和体表示两种类型。
面表示: 也就是表示三维对象的表面。常用方法为多边形网格、隐式曲面和参数曲面,下面会着重介绍多边形网格,市面上主流的WebGL图形引擎,如:Cesium.js、iTwin.js、Three.js、SuperMap等,均采用多边形网格的数据结构。
体表示: 表示三维对象的体积。常用的体数据表示方法包括体素和构造实体几何。需要注意的是,在iTwin.js中,出于性能考虑,无论你是以那种方式构造出的实体,导入模型后最终都会转化为多边形网格的表现形式。

二、多边形网格

多边形网格是三维模型常用的形状表现形式。一个多边形网格是利用多边形单元,如:三角形、四边形等,对一个连续曲面的分割。以三角形网格为例,三角网格(Triangle Meshes)也称作三角形图元,是计算机图形学中用来构造一个物体的最小单位。每个三角网格由顶点坐标(Vertices)和顶点索引(Faces)构成。顶点坐标即三角形的三个顶点在空间中的坐标;顶点索引包含了顶点之间的连接顺序,即顶点以怎样的顺序连接起来,形成网格的边和面。
多边形网格
由若干个多边形网格面围成的闭合几何结构,我们称为mesh体
在这里插入图片描述

三、材质

纹理映射
材质包括纹理和颜色,是三维模型的外观表现形式。纹理通常是指纹理贴图(texture),比如为赛车贴上贴图。纹理的像素称为纹素(纹理元素),纹理中的位置通常称为纹理坐标或UV坐标。纹理坐标通过原点位于图像左下角的参考系统进行表示,对应于(0, 0)和(1, 1),如果纹理坐标的值超出纹理空间,此时会通过纹理环绕来处理,通常分为截取和重复两种模式。因此所谓贴图就是将一张二维图片映射到三维模型表面上去,这张二维图片称为纹理图片,贴图过程称为纹理映射。以多边形网格为例,将纹理图片的UV坐标和网格的每个顶点坐标建立一一对应的关系,建立图片到网格表面的映射,从而实现贴图。
在这里插入图片描述

四、iTwin.js中的模型数据结构

在iTwin.js中模型的几何结构表现形式分为三角网格(triangulated mesh)和线形(line),本次我们重点关注的是三角网格。如下图所示,iTwin.js中模型的构成可以理解为,几何结构加材质。
贴图
模型的数据结构遵循iModels.ExportGraphicsInfo,具体如下所示:

  {
    elementId: '0x1a',
    mesh: {
      indices: [0, 1, 2],
      points: [
        0, 0, 0, 10, 0,
        0, 10, 0, 10
      ],
      normals: [
        0, 0, 1, 0, 0,
        1, 0, 0, 1
      ],
      params: [0, 1, 10, 1, 10, 11],
      isTwoSided: true
    },
    color: 0,
    subCategory: '0x19',
    geometryClass: 0,
    materialId: '0x18',
    textureId: '0x17'
  }

参数含义:

  • elementId:元素id,唯一标识
  • mesh: 网格数据,这里均为统一索引的三角形网格
    • indices:顶点索引,每三个索引表示一个三角形
    • points:顶点坐标,每三个值为一组
    • normals:法向量,每三个值为一组
    • params:UV坐标,每两个值为一组
    • isTwoSided:网格是否两侧可见
  • color: 颜色
  • subCategory: 定义几何元素引用的外观
  • geometryClass: 几何图形的类型
  • materialId: 材质id
  • textureId: 纹理贴图id
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

杭州豆角焖面

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

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

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

打赏作者

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

抵扣说明:

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

余额充值