[OpenGL] 10. Alpha Blending & Multi-Texturing

scarleter99·2023년 6월 3일
0

OpenGL

목록 보기
10/10

📌 Alpha Blending & Multi-Texturing

  • Alpha Blending
    • 투명한 오브젝트를 렌더링하는 방법이다.
    • 단색이 아니라 오브젝트 자체가 가지고 있는 컬러와 뒤에 있는 다른 오브젝트의 컬러를 일정 비율로 혼합하여 렌더링한다.
  • Multi-Texturing
    • 두개의 서로 다른 Texture 를 Blending하여 새로운 텍스처를 만든다.

Alpha Blending

// specify pixel arithmetic
void glBlendFunc(GLenum sfactor, GLenum dfactor);
// specify pixel arithmetic for RGB/A separately
void glBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);

// specify the blend equation for RGBA
void glBlendEquation(GLenum mode);
// specify the blend equations for RGB/A separately
void glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha);

  • 현실의 물리 법칙과 다르게 동작한다.
  • Z-Buffer Algorithm을 사용하면 뒤에있는 오브젝트가 누락되므로 Painter’s Algorithm을 사용해야한다.
  • 불투명한 Polygon은 따로 처리한다.

Multi-Texturing

Fragment Shader

precision mediump float;

uniform sampler2D s_baseMap;
uniform sampler2D s_lightMap;

varying vec2 v_texCoord;

void main()
{
  vec4 baseColor;
  vec4 lightColor;
  baseColor = texture2D(s_baseMap, v_texCoord);
  lightColor = texture2D(s_lightMap, v_texCoord);
  glFragColor = baseColor * (lightColor + 0.25); // example
}

OpenGL Code

GLuint baseMapLoac, baseMapTexId, lightMapLoc, lightMapTexId;

// Bind the base map
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, baseMapTexId);

// Set the base map sampler to texture unit 0
glUniform1i(baseMapLoc, 0);

// Bind the light map
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, lightMapTexId);

// Set the base map sampler to texture unit 1
glUniform1i(lightMapLoc, 1);

0개의 댓글