현재 OpenGL을 배우려고하고 있는데 텍스처 투명도 문제가 있습니다.Qt OpenGL - 텍스처 투명도 문제
두 개의 평면/사각형이 질감이 있습니다. 첫 번째는 카메라에 가장 가깝고 두 번째는 첫 번째 것보다 뒤에 있습니다. 둘 다 50 % 불투명도의 배경을 가진 이미지로 텍스처되어 있습니다.
첫 번째 평면이 어느 정도 투명하기 때문에 두 번째 평면의 질감을 볼 수 있어야합니다. 그러나 그렇지 않습니다. 내가 사용하고있는 이미지는 실제로 (카메라를 회전하면 볼 수 있습니다.) 그들 자신의 이미지로 나타납니다. 그리고 그들에게 단어가 있습니다 (이미지의 반투명 배경을 통해 나는 피를 흘릴 것으로 예상됩니다).).
해결 방법이 있습니까? 여기에 내 초기화 및 paintGL 방법 (아마도 그들은 무섭게 최적화)이다
void oglWidget::initializeGL()
{
glEnable(GL_DEPTH_TEST);
glEnable(GL_BLEND);
glEnable(GL_CULL_FACE);
qglClearColor(QColor(Qt::white));
shaderProgram.addShaderFromSourceFile(QGLShader::Vertex, ":/vertexShader.vsh");
shaderProgram.addShaderFromSourceFile(QGLShader::Fragment, ":/fragmentShader.fsh");
shaderProgram.link();
// vertices[1] << QVector3D(-xAmt, -1, 0) << QVector3D(xAmt, -1, 0) << QVector3D(xAmt, 1, 0) // Front
// << QVector3D(xAmt, 1, 0) << QVector3D(-xAmt, 1, 0) << QVector3D(-xAmt, -1, 0);
float xAmt = 16.00/9.00;
vertices << QVector3D(-xAmt, -1, 0) << QVector3D(xAmt, -1, 0) << QVector3D(xAmt, 1, 0) // Midground
/*<< QVector3D(xAmt, 1, 0) << QVector3D(-xAmt, 1, 0) << QVector3D(-xAmt, -1, 0)*/
<< QVector3D(-xAmt, -1, -1) << QVector3D(xAmt, -1, -1) << QVector3D(xAmt, 1, -1) // Background
<< QVector3D(xAmt, 1, -1) << QVector3D(-xAmt, 1, -1) << QVector3D(-xAmt, -1, -1);
textureCoordinates << QVector2D(0, 0) << QVector2D(1, 0) << QVector2D(1, 1) // Front
<< QVector2D(1, 1) << QVector2D(0, 1) << QVector2D(0, 0)
<< QVector2D(0, 0) << QVector2D(1, 0) << QVector2D(1, 1) // Front
<< QVector2D(1, 1) << QVector2D(0, 1) << QVector2D(0, 0);
}
void oglWidget::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
QMatrix4x4 mMatrix;
QMatrix4x4 vMatrix;
QMatrix4x4 cameraTransformation;
cameraTransformation.rotate(alpha, 0, 1, 0);
cameraTransformation.rotate(beta, 1, 0, 0);
QVector3D cameraPosition = cameraTransformation * QVector3D(0, 0, distance);
QVector3D cameraUpDirection = cameraTransformation * QVector3D(0, 1, 0);
vMatrix.lookAt(cameraPosition, QVector3D(0, 0, 0), cameraUpDirection);
shaderProgram.bind();
shaderProgram.setUniformValue("mvpMatrix", pMatrix * vMatrix * mMatrix);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
shaderProgram.setUniformValue("texture", 0);
shaderProgram.setAttributeArray("vertex", vertices.constData());
shaderProgram.enableAttributeArray("vertex");
shaderProgram.setAttributeArray("textureCoordinate", textureCoordinates.constData());
shaderProgram.enableAttributeArray("textureCoordinate");
glGenTextures(0, &texture); glBindTexture(GL_TEXTURE_2D, texture);
QImage tempTexture = QGLWidget::convertToGLFormat(QImage(ImgManager::getImg("/Textures/Editor/m.png")));
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tempTexture.width(), tempTexture.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, tempTexture.bits());
glDrawArrays(GL_TRIANGLES, 0, vertices.size());
shaderProgram.release();
}
깊이 테스트를 비활성화하거나 깊이 마스크를 설정해보십시오. – dari
네, 그게 문제였습니다. 원한다면 의견 대신 대답으로 회신 해주십시오. 불편을 확인하고 동의하십시오. – Yattabyte