美文网首页OpenGL学习笔记
【五十七,模型加载-4 网格(Mesh)定义】

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

作者: Woodlouse | 来源:发表于2020-01-03 20:38 被阅读0次

网格

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

一个网格(包含顶点、索引和材质属性)是在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 : 绘制网格

相关文章

网友评论

    本文标题:【五十七,模型加载-4 网格(Mesh)定义】

    本文链接:https://www.haomeiwen.com/subject/mbnaoctx.html