加載模型
斷斷續(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)行效果如下圖:
問題
在另一臺電腦上解析紋理名稱時得到一個很詭異的字符串桂塞,字符串的前四個字符直接就是結(jié)束符\0
凹蜂,如下圖:
可能是某個庫文件加載失敗導(dǎo)致的把。
具體的shader阁危,資源從下面查找:
模型加載源碼