Я пишу игру, используя opengl4.5 и Visual Studio 2017. При случайном совпадении я запускаю игру несколько раз непрерывно (в режиме релиза запускаю и закрываю ее, затем снова запускаю и снова закрываю,повторить так).Примерно через пять или шесть раз я получил очень странную форму (или модель).
Нормальная модель:
Странная форма, которую я получил:
Эта форма очень похожа на мою другую модель дерева:
Я использую тот же код для рендеринга дома, этих деревьев и многих других посохов.Но похоже, что только дом ведет себя странно.
Код рендеринга:
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.
Кто-то сталкивался с той же проблемой, что и я?