OpenGL에서 텍스처 매핑에 큰 문제가 있습니다. 주로 투명성이 있습니다. 간단한 텍스처를 먼저 표시 한 다음 더 자세한 텍스처를 두 번째로 표시하여 다중 레이어 배경을 복제하려고합니다. 예를 들어 첫 번째 것은 파란색이고 두 번째 것은 산을 포함합니다. 이 작업은 거의 완료되었지만 이상한 결과가 있으며이를 해결할 방법이 확실하지 않습니다.OpenGL/Qt : 텍스처 투명성이 작동하지 않습니다.
기본적으로 내 두 번째 질감에는 검정색이 나타나지 않습니다. 나는이 작품을 가지고 있지만, 내 산의 갈색 첫 번째 배경 질감 (또는 그것에 추가)와 조화를 보인다. 나의 갈색 산이 창백한 빨강으로 나타납니다. 내 glBlendFunc는 현재 GL_ONE에 있지만 GL_ONE_MINUS_SRC_ALPHA를 변경하지 않고 시도했습니다. 흑은 아직 거기에있다. 산들은 여전히 갈색이다.
나는 차이가 없습니다 (BMP, JPG 및 PNG)으로 세 가지 다른 형식으로 이미지를 시도했다.
TEXTURE 1 : 아래
내가 두 텍스처가 코드입니다if (buf.load("images/background-layer1.png"))
{
tex1 = QGLWidget::convertToGLFormat(buf);
glPushAttrib(GL_CURRENT_BIT | GL_DEPTH_BUFFER_BIT | GL_ENABLE_BIT);
glGenTextures(1, &texture[0]);
glBindTexture(GL_TEXTURE_2D, texture[0]);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, 4, tex1.width(), tex1.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, tex1.bits());
glEnable(GL_TEXTURE_2D);
glBegin(GL_QUADS);
glTexCoord2f(0, 0);
glVertex2d(m_pBottomLeft.x, m_pBottomLeft.y); //Bottom Left
glTexCoord2f(1, 0);
glVertex2d(m_pBottomRight.x, m_pBottomRight.y); //Bottom Right
glTexCoord2f(1, 1);
glVertex2d(m_pTopRight.x, m_pTopRight.y); //Top Right
glTexCoord2f(0, 1);
glVertex2d(m_pTopLeft.x, m_pTopLeft.y); //Top Left
glEnd();
glDisable(GL_TEXTURE_2D);
glPopAttrib();
}
TEXTURE 2 :
if (buf2.load("images/background-layer2.png"))
{
tex2 = QGLWidget::convertToGLFormat(buf2);
glPushAttrib(GL_CURRENT_BIT | GL_DEPTH_BUFFER_BIT | GL_ENABLE_BIT);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
glEnable(GL_DEPTH_TEST);
glEnable(GL_TEXTURE_2D);
glGenTextures(2, &texture[1]);
glBindTexture(GL_TEXTURE_2D, texture[1]);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex2.width(), tex2.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, tex2.bits());
glBegin(GL_QUADS);
glColor4f(1, 1, 1, 1);
glTexCoord2f(0, 0);
glVertex2d(m_pBottomLeft.x, m_pBottomLeft.y); //Bottom Left
glTexCoord2f(1, 0);
glVertex2d(m_pBottomRight.x, m_pBottomRight.y); //Bottom Right
glTexCoord2f(1, 1);
glVertex2d(m_pTopRight.x, m_pTopRight.y); //Top Right
glTexCoord2f(0, 1);
glVertex2d(m_pTopLeft.x, m_pTopLeft.y); //Top Left
glEnd();
glDisable(GL_BLEND);
glDisable(GL_DEPTH_TEST);
glDisable(GL_TEXTURE_2D);
glPopAttrib();
}
스크린 샷 :
산 질감에 유효한 알파 채널이 포함되어 있습니까? – rotoglup
이것은 바보처럼 들릴 것입니다. 그러나 어떻게 알아낼 수 있습니까? – Starforsaken101
큰 문제는 ... 알파 채널을 사용하면 검은 부분을 좋아하는 것처럼 이미지의 일부분을 투명하게 만들 수 있습니다. 이미지 편집 소프트웨어를 사용하여 이미지를 확인/생성 할 수 있습니다. 예를 들어 김프를보십시오. http://docs.gimp.org/en/gimp-using-web-transparency.html – rotoglup