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

加載模型

斷斷續(xù)續(xù)的實(shí)現(xiàn)了網(wǎng)格(Mesh)、模型(Model)類,配置好SOIL庫后終于可以進(jìn)行3D模型的加載,展示了。

3D模型渲染類還在之前的render類的基礎(chǔ)上進(jìn)行擴(kuò)展,依舊是初始化、繪制這樣的流程,頭文件的定義如下:

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

初始化函數(shù)
初始化函數(shù)負(fù)責(zé)加載shader文件、加載模型和生成攝像機(jī):

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);
}

繪制函數(shù)
繪制函數(shù)負(fù)責(zé)生成設(shè)置模型、投射和視圖矩陣,然后調(diào)用模型的繪制函數(shù):

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);
}

編譯無誤后,運(yùn)行效果如下圖:


模型效果圖

問題

在另一臺(tái)電腦上解析紋理名稱時(shí)得到一個(gè)很詭異的字符串,字符串的前四個(gè)字符直接就是結(jié)束符\0,如下圖:

詭異的字符串

可能是某個(gè)庫文件加載失敗導(dǎo)致的把。


具體的shader,資源從下面查找:
模型加載源碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容