OpenGL学习笔记

【六十三,模型加载-10加载模型】

2020-01-14  本文已影响0人  Woodlouse

加载模型

断断续续的实现了网格(Mesh)、模型(Model)类,配置好SOIL库后终于可以进行3D模型的加载,展示了。

3D模型渲染类还在之前的render类的基础上进行扩展,依旧是初始化绘制这样的流程,头文件的定义如下:

// 模型渲染
class ModelRender : public render
{
public:
    void init() override;
    void clear() override;
    
protected:
    void draw() override;
    
private:
    Model *m_pModel;
    
};

初始化函数
初始化函数负责加载shader文件、加载模型和生成摄像机:

void ModelRender::init()
{
    glEnable(GL_DEPTH_TEST);
    
    // 初始化shader
    _initShader("resources/shader/model_0_0.vs", "resources/shader/model_0_0.fs");
    
    // 模型
    m_pModel = new Model("resources/objects/nanosuit/nanosuit.obj");
//    m_pModel = new Model("resources/objects/cyborg/cyborg.obj");
    
    m_pCamera = new Camera();
    m_pCamera->setDelta(&m_deltaTime);
}

绘制函数
绘制函数负责生成设置模型、投射和视图矩阵,然后调用模型的绘制函数:

void ModelRender::draw()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 
    m_pShader->use();
    
    glm::mat4 projection = glm::perspective(m_pCamera->zoom(),
                                            float(LEARN_OPEN_GL::SCR_WIDTH/LEARN_OPEN_GL::SCR_HEIGHT),
                                            0.1f,
                                            100.0f);
    glm::mat4 view = m_pCamera->GetViewMatrix();
    m_pShader->setMat4("projection", projection);
    m_pShader->setMat4("view", view);
    
    glm::mat4 model(1.0f);
    model = glm::translate(model, glm::vec3(0.0f, -1.75f, 0.0f));
    model = glm::scale(model, glm::vec3(0.2f, 0.2f, 0.2f));
    m_pShader->setMat4("model", model);
    
    m_pModel->Draw(m_pShader);
}

编译无误后,运行效果如下图:


模型效果图

问题

在另一台电脑上解析纹理名称时得到一个很诡异的字符串,字符串的前四个字符直接就是结束符\0,如下图:

诡异的字符串

可能是某个库文件加载失败导致的把。


具体的shader,资源从下面查找:
模型加载源码

上一篇 下一篇

猜你喜欢

热点阅读