Страницы

Поиск по вопросам

вторник, 16 октября 2018 г.

Баг текстуры в 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);


Ответ

Проблемы в обоих случаях - скрытые грани куба рисуются некорректно. Проверьте, что у Вас выставлен GL_ALPHA_TEST.
https://stackoverflow.com/questions/9353210/rendering-glitch-with-gl-depth-test-and-transparent-textures
Кроме того, если альфа не дискретна 0/1, попробуйте такой подход: Порядок наложения текстур влияет на работу alpha-канала. Как это обойти?

Комментариев нет:

Отправить комментарий