All posts by kpark

OpenGL Blending Filter

OpenGL Blending Filter

14.OpenGLBlendingFilter.zip


 glEnable(GL_BLEND);
 if (g_filter == 0)                     // Default (no blending) = Cs*1
  glBlendFunc(GL_ONE, GL_ZERO);
 else if (g_filter == 1)                // Draw background only = Cd*1
  glBlendFunc(GL_ZERO, GL_ONE);
 else if (g_filter == 2)                // Cs*1 + Cd*1
  glBlendFunc(GL_ONE, GL_ONE);
 else if (g_filter == 3)                // Alpha blending (back-to-front) = Cs*As + Cd*(1-As)
  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
 else if (g_filter == 4)                // Additive blending (brighten the scene) = Cs*As + Cd*1
  glBlendFunc(GL_SRC_ALPHA, GL_ONE);
 else if (g_filter == 5)                // Multiplicative blending = Cd*Cs
  glBlendFunc(GL_ZERO, GL_SRC_COLOR);
 else if (g_filter == 6)                // darken the scene = Cd*As
  glBlendFunc(GL_ZERO, GL_SRC_ALPHA);
 else if (g_filter == 7)                 // Invert all the colors = Cs*(1-Cd)
  glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ZERO);

Texture Animation

Texture Animation


// init 중간생략..

for (int i=0; i<7; i++)
{
char filename[255];
sprintf(filename, “tacgun0%d.rgb”, i);
texture[i] = InitTexture(filename);
}


// draw 중간생략..

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texture[currentTex]);
drawSquare();
glBindTexture(GL_TEXTURE_2D, 0);

// update

void update()
{
static int currentTime, deltaTime, prevTime = 0;
currentTime = glutGet(GLUT_ELAPSED_TIME);
deltaTime = currentTime – prevTime;
prevTime = currentTime;
currentTex = (GLuint) ((float)currentTime * 0.01) % 7;
glutPostRedisplay();
}

OpenGL Texture Mapping Filtering & Environment Parameters

Wrapping parameters (CLAMP | CLAMP_TO_EDGE | GL_REPEAT | GL_MIRRORED_REPEAT)

// Square Texture Coordinates
squareTextureCoords.push_back(glm::vec2
(-1.0f, -1.0f));
squareTextureCoords.push_back(glm::vec2(3.0f, -1.0f));
squareTextureCoords.push_back(glm::vec2(3.0f, 3.0f));
squareTextureCoords.push_back(glm::vec2(-1.0f, 3.0f));

//(왼쪽 아래)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);

//(오른쪽 아래)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

//(왼쪽 위)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

//(오른쪽 위)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT);

사용자 삽입 이미지



Magnification/Minification/Mipmap filter parameters (NEAREST | LINEAR)

//(위왼쪽)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);

//(위오른쪽)
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_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

//(아래오른쪽)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

사용자 삽입 이미지