美文网首页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