Проверка глубины с двумя прозрачными изображениями вызывает странные артефакты

Я рисую куст, состоящий из двух одинаковых изображений, скрещенных, как вы можете видеть на изображении внизу:

Но когда мы поворачиваемся вокруг куста, одно из двух изображений имеет явно большие проблемы с его тестом глубины:

Я пытался отключить тест глубины, но это было еще хуже (фоновые кусты перекрывали передний). Я просто использую этот код для рендеринга куста (с m_tex и m_vertex - координаты куста, загруженного в файл):

//Scene initialisation
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

//Then we render objects one per one
glBindTexture(GL_TEXTURE_2D, m_texture);
glBegin(GL_QUADS);
    glTexCoord2d(m_tex[0][0], m_tex[0][1]); glVertex3d(m_vertex[0][0] + coordinates[0], m_vertex[0][1] + coordinates[1], m_vertex[0][2] + coordinates[2]);
    glTexCoord2d(m_tex[1][0], m_tex[1][1]); glVertex3d(m_vertex[1][0] + coordinates[0], m_vertex[1][1] + coordinates[1], m_vertex[1][2] + coordinates[2]);
    glTexCoord2d(m_tex[2][0], m_tex[2][1]); glVertex3d(m_vertex[2][0] + coordinates[0], m_vertex[2][1] + coordinates[1], m_vertex[2][2] + coordinates[2]);
    glTexCoord2d(m_tex[3][0], m_tex[3][1]); glVertex3d(m_vertex[3][0] + coordinates[0], m_vertex[3][1] + coordinates[1], m_vertex[3][2] + coordinates[2]);
glEnd();

Как я могу исправить эту ошибку и провести соответствующий тест глубины, работая с двумя изображениями?

1 ответ

Решение

Прежде всего, немедленный режим (glBegin(), glEnd() и т. Д.) Устарел, поэтому я бы посоветовал его избегать, особенно если вы сейчас изучаете OpenGL ( ознакомьтесь с документацией здесь).

Помимо этого, вы должны опубликовать полный пример (посмотрите здесь), потому что есть несколько вещей, которые могут вызвать эффекты, которые вы описываете (как ваша сцена инициализируется? Как вы загружаете текстуры?), Они действительно RGB A?, так далее).

Другие вопросы по тегам