3D引擎数据结构与glTF(3): Mesh 您所在的位置:网站首页 mesh文件转换 3D引擎数据结构与glTF(3): Mesh

3D引擎数据结构与glTF(3): Mesh

2024-07-09 09:39| 来源: 网络整理| 查看: 265

在上一篇文章中我们介绍了场景中对象之间的层次关系,接下来我们就探讨单个物体在三维空间中的表示。

要渲染三维空间中的物体,首先就要在三维空间中表示物体的造型。目前图形学中最常用的方法叫做“边界表示法( Boundary Representation )”,即用一组多边形或者曲面来定义物体的边界,它们可以区分了空间中哪些部分是物体的内部,哪些是物体的外部。其中使用多边形的方式更通用一些,构造一个物体边界的一组多边形就被称为“ Mesh ”。 在这里我们先讨论静态 mesh,也就是自身不发生形变的 mesh ,glTF 也支持蒙皮和骨骼动画,我们后面再讲。

也许现在三角形太流行了,大家可能不习惯了使用多边形。实际上,现在建模软件还在大量使用多边形,最后这些模型导入 3D 引擎的时候会再进行三角形化( triangularization )。三角形的流行是在 GPU 兴起之后的事儿,因为三角形更有利于硬件去实现和优化。在早期的 3D 游戏中,例如 Quake 使用软件渲染,它使用凸多边形。在 OpenGL 早期的 API 版本中也有对多边形的支持: glBegin() 支持 GL_POLYGON 模式,而在3.0以后版本的 OpenGL API 中已经不再支持了,下面我们讨论的 Mesh 也就使用三角形模式了。

Mesh 的数据组织

OpenGL 或者其他图形 API 都普遍支持下面这三种三角形 Mesh 的拓扑结构:

Triangle List:每三个顶点组成一个三角形 Triangle Strip:每增加一个顶点,和前面的两个顶点组成一个三角形(共享前面两个顶点) Triangle Fan:每增加两个顶点,与第0个顶点组成一个三角形(共享第0个顶点)

OpenGL 支持两种向 GPU 提交 Mesh 数据的方式:

DrawArrays 方式 把 Mesh 中的三角形的所有顶点数据,按照上面那三种方式之一排列形成一个顶点数组,就可以让 GPU 去绘制所有这些三角形了。

DrawElements 方式 在一个 Mesh 中很多三角形是互相连接在一起的,具体的说,两个三角形会共用一条边,那么这条边上的两个顶点则可以共享。为了共享顶点,就需要引入“顶点索引”。(做实时渲染的人最抠门了,各种省:joy:)。把所有的顶点放在一个数组中,然后另外使用一个 index buffer 通过数



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有