Получил очень странную форму после запуска программы несколько раз - PullRequest
0 голосов
/ 17 марта 2019

Я пишу игру, используя 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();

И в соответствующем деструкторе я тоже glDelete * мои VAO и VBO.

Кто-то сталкивался с той же проблемой, что и я?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...