【五十七,模型加载-4 网格(Mesh)定义】

网格

用建模工具构建物体时,通常不会直接使用单个形状来构建一个完整的模型。一般来说,一个模型会由几个子模型组合拼接而成,模型中的这些子模型/形状就是一个网格

一个网格(包含顶点、索引和材质属性)是在OpenGL中绘制的最小单位。一个模型通常包含多个网格。

想要绘制一个模型,我们不会去渲染整个模型,而是去渲染这个模型所包含的所有独立的Mesh。

定义网格

一个网格至少需要:

  • 一组顶点
  • 纹理形式表现的材质数据
  • 索引绘制用的索引

定义顶点
一个顶点包含三个要素:

  • 位置向量
  • 法线向量
  • 纹理坐标

结构体定义如下:

struct Vertex
{
    glm::vec3 Position;
    glm::vec3 Normal;
    glm::vec2 TexCoords;
};

定义纹理
纹理需要定义两个属性:

  • 纹理Id
  • 纹理类型:diffuse纹理或者specular纹理

结构体定义如下:

struct Texture
{
    GLuint id;
    String type;
};

定义网格
在定义好顶点纹理的表达后,我们可以定义网格的结构了:

class Mesh
{
Public:
    vector<Vertex> vertices;
    vector<GLuint> indices;
    vector<Texture> textures;
    Mesh(vector<Vertex> vertices, vector<GLuint> indices, vector<Texture> texture);
    Void Draw(Shader shader);

private:
    GLuint VAO, VBO, EBO;
    void setupMesh();
}

在这个类中定义了三个函数:

  • 构造函数:初始化所有必须的数据
  • setupMesh:初始化缓冲
  • Draw : 绘制网格
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容