多次运行程序后形状非常奇怪

时间:2019-03-17 03:09:09

标签: c++ opengl

我正在使用opengl4.5和Visual Studio 2017编写游戏。由于偶然的巧合,我连续多次运行我的游戏(在发布模式下,先运行然后关闭,然后再次运行然后再次关闭,重复这种方式)。大约五六次之后,我得到了一个非常奇怪的形状(或模型)。

普通模型: enter image description here

我得到的奇怪形状: enter image description here

该形状与我的其他树模型非常相似: enter image description here

我使用相同的代码来渲染房屋,这些树木和许多其他员工。但是似乎只有房子表现得很奇怪。

渲染代码:

    glBindVertexArray(model->m_VAO);

    if (!model->m_backCulling) {
        MasterRenderer::DisableBackCulling();
    }

    for (const auto& mesh: model->m_mesh) {

        m_shader->setInts(m_uniformLocations.at("useDiffuseTexture"), mesh.UseDiffuseTexture);
        m_shader->setInts(m_uniformLocations.at("useSpecularTexture"), mesh.UseSpecularTexture);
        m_shader->setVec(m_uniformLocations.at("material.base_ambient"), mesh.BaseMaterial.Ambient);
        m_shader->setVec(m_uniformLocations.at("material.base_diffuse"), mesh.BaseMaterial.Diffuse);
        m_shader->setVec(m_uniformLocations.at("material.base_specular"), mesh.BaseMaterial.Specular);
        m_shader->setFloats(m_uniformLocations.at("material.shininess"), mesh.BaseMaterial.Shininess);

        // Bind appropriate textures
        std::vector<Texture> textures = mesh.Textures;
        for (unsigned int i = 0; i < textures.size(); i++)
        {
            if (textures[i].type == "texture_diffuse") {
                glActiveTexture(GL_TEXTURE0);
            }
            else {
                glActiveTexture(GL_TEXTURE1);
            }
            glBindTexture(GL_TEXTURE_2D, textures[i].id);
        }

        glDrawElementsBaseVertex(GL_TRIANGLES,
            mesh.NumIndices,
            GL_UNSIGNED_INT,
            (void*)(sizeof(unsigned int) * mesh.BaseIndex),
            mesh.BaseVertex);
    }

    glBindVertexArray(0);
    MasterRenderer::DisableBackCulling();

在相应的析构函数中,我还可以删除*我的VAO和VBO。

有人遇到过与我相同的问题吗?

0 个答案:

没有答案