#opengl
Когда я нахожусь по одну сторону от текстуры, она прозрачна и выглядит как нужно: Но если я нахожусь с противоположной стороны от текстуры, с двумя ее сторонами что-то не так: Текстура на всех гранях одна и та же. Код загрузки текстур: GLuint Render::loadTexture(const sf::String & name) { sf::Image image; if (!image.loadFromFile(name)) return EXIT_FAILURE; image.flipVertically(); GLuint texture = 0; glGenTextures(1, &texture); glBindTexture(GL_TEXTURE_2D, texture); gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, image.getSize().x, image.getSize().y, GL_RGBA, GL_UNSIGNED_BYTE, image.getPixelsPtr()); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, 0x812F); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, 0x812F); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); return texture; } Код отрисовки куба: glTranslatef(x, y, z); glBindTexture(GL_TEXTURE_2D, texture[0]); glBegin(GL_QUADS); glTexCoord2f(0, 0); glVertex3f(-size, -size, -size); glTexCoord2f(1, 0); glVertex3f(size, -size, -size); glTexCoord2f(1, 1); glVertex3f( size, size, -size); glTexCoord2f(0, 1); glVertex3f( -size, size, -size); glEnd(); glBindTexture(GL_TEXTURE_2D, texture[1]); glBegin(GL_QUADS); glTexCoord2f(0, 0); glVertex3f(size, -size, size); glTexCoord2f(1, 0); glVertex3f(-size, -size, size); glTexCoord2f(1, 1); glVertex3f( -size, size, size); glTexCoord2f(0, 1); glVertex3f( size, size, size); glEnd(); glBindTexture(GL_TEXTURE_2D, texture[2]); glBegin(GL_QUADS); glTexCoord2f(0, 0); glVertex3f(-size, -size, size); glTexCoord2f(1, 0); glVertex3f(-size, -size, -size); glTexCoord2f(1, 1); glVertex3f(-size, size, -size); glTexCoord2f(0, 1); glVertex3f(-size, size, size); glEnd(); glBindTexture(GL_TEXTURE_2D, texture[3]); glBegin(GL_QUADS); glTexCoord2f(0, 0); glVertex3f(size, -size, -size); glTexCoord2f(1, 0); glVertex3f(size, -size, size); glTexCoord2f(1, 1); glVertex3f(size, size, size); glTexCoord2f(0, 1); glVertex3f(size, size, -size); glEnd(); glBindTexture(GL_TEXTURE_2D, texture[4]); glBegin(GL_QUADS); glTexCoord2f(0, 0); glVertex3f(-size, -size, size); glTexCoord2f(1, 0); glVertex3f(size, -size, size); glTexCoord2f(1, 1); glVertex3f( size, -size, -size); glTexCoord2f(0, 1); glVertex3f( -size, -size, -size); glEnd(); glBindTexture(GL_TEXTURE_2D, texture[5]); glBegin(GL_QUADS); glTexCoord2f(0, 0); glVertex3f(-size, size, -size); glTexCoord2f(1, 0); glVertex3f(size, size, -size); glTexCoord2f(1, 1); glVertex3f( size, size, size); glTexCoord2f(0, 1); glVertex3f( -size, size, size); glEnd(); glTranslatef(-x, -y, -z);
Ответы
Ответ 1
Проблемы в обоих случаях - скрытые грани куба рисуются некорректно. Проверьте, что у Вас выставлен GL_ALPHA_TEST. https://stackoverflow.com/questions/9353210/rendering-glitch-with-gl-depth-test-and-transparent-textures Кроме того, если альфа не дискретна 0/1, попробуйте такой подход: Порядок наложения текстур влияет на работу alpha-канала. Как это обойти?
Комментариев нет:
Отправить комментарий