쿼드에 그려지는 텍스처의 투명도를 다르게하려고합니다. glColor4f로 설정된 알파를 제외하고는 아래 코드가 효과가 없습니다. 이것에 대한 가능한 이유는 무엇입니까? 프로그램의 다른 곳에서 일할 가능성이 있습니까?OpenGL에서 알파 블렌딩이 작동하지 않습니다.
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_COLOR, GL_ONE_MINUS_SRC_ALPHA);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, textureId);
glColor4f(1.0f, 1.0f, 1.0f, 0.3f);
glVertexAttribPointer(vertexHandle, 3, GL_FLOAT, GL_FALSE, 0, quadVertices);
glVertexAttribPointer(normalHandle, 3, GL_FLOAT, GL_FALSE, 0, quadNormals);
glVertexAttribPointer(textureCoordHandle, 2, GL_FLOAT, GL_FALSE, 0, quadTexCoords);
glEnableVertexAttribArray(vertexHandle);
glEnableVertexAttribArray(normalHandle);
glEnableVertexAttribArray(textureCoordHandle);
glUniformMatrix4fv(mvpMatrixHandle, 1, GL_FALSE, (GLfloat*)&modelViewProjectionButton.data[0]);
glDrawElements(GL_TRIANGLES, NUM_QUAD_INDEX, GL_UNSIGNED_SHORT, quadIndices);
glDisableVertexAttribArray(vertexHandle);
glDisableVertexAttribArray(normalHandle);
glDisableVertexAttribArray(textureCoordHandle);
편집 : 나는 아래의 대답에 따라 그것을 할 수 있었다.
uniform float alpha;
void main()
{
gl_FragColor = texture2D(texSampler2D, texCoord);
gl_FragColor = gl_FragColor * alpha;
}
나는 장면을 그리기있을 때 그럼 난 (예 : 0.5 알파를 설정하기위한) 이런 식으로 사용 : 사람이 관심이 있다면, 나는 다음과 같이 알파라는 내 쉐이더에서 균일 한 변수를 넣어
GLint alphaLocation = glGetUniformLocation(shaderProgramID, "alpha");
glUniform1f(alphaLocation, 0.5);
예, 이것은 기본적으로 제가 암시하고있는 것입니다. 이 작업을 수행 할 때 실제로 두 가지 선택 사항이 있지만 꼭짓점 쉐이더에서 유니폼을 사용하고 다양한 것을 프래그먼트 쉐이더로 전달할 수 있습니다 (이것은 효과적으로 고정 함수 파이프 라인이'glColor (...) '와 함께 작동하는 방식입니다)). 그러나 조각 쉐이더에서 유니폼을 사용하는 것은 훨씬 간단합니다. 특히 알파 값이 ** uniform **이므로 생각할 때마다 버텍스 별 보간법을 사용할 필요가 없습니다. –