加载模型
断断续续的实现了网格(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,资源从下面查找:
模型加载源码