Category Archives: OpenGL

OpenGL Blending

Blending 예제
http://dis.dankook.ac.kr/lectures/cg08/entry/blending-예제

Blending Filter 예제
http://dis.dankook.ac.kr/lectures/cg08/entry/blending-filter-예제

//
Default (no blending) = Cs*1
glBlendFunc(GL_ONE, GL_ZERO)      

사용자 삽입 이미지

// Draw background only = Cd*1
glBlendFunc(GL_ZERO,
GL_ONE)  

사용자 삽입 이미지

// Addition Blending = Cs*1 + Cd*1
glBlendFunc(GL_ONE,
GL_ONE)    

사용자 삽입 이미지

// Alpha blending (back-to-front) = Cs*As + Cd*(1-As)

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) 

사용자 삽입 이미지

// Brighten the scene = Cs*As +
Cd*1
glBlendFunc(GL_SRC_ALPHA, GL_ONE) 

사용자 삽입 이미지

// Multiplicative blending = Cd*Cs
glBlendFunc(GL_ZERO,
GL_SRC_COLOR)

사용자 삽입 이미지

// darken the scene = Cd*As
glBlendFunc(GL_ZERO,
GL_SRC_ALPHA);

사용자 삽입 이미지

// Invert all the colors =
Cs*(1-Cd)
glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ZERO)

사용자 삽입 이미지

OpenGL Texture Mapping Filtering & Environment Parameters

Wrapping parameters (REPEAT | CLAMP)

//(왼쪽)
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_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

 glBindTexture(GL_TEXTURE_2D, texID1);
glBegin(GL_QUADS);
glNormal3f(0, 0, 1);
glTexCoord2i(-1,-1);
glVertex3f(-2.0, -1.0, 0.0);
glTexCoord2i(3,-1);
glVertex3f(-0.1, -1.0, 0.0);
glTexCoord2i(3,3);
glVertex3f(-0.1, 1.0, 0.0);
glTexCoord2i(-1,3);
glVertex3f(-2.0, 1.0, 0.0);
glEnd();



사용자 삽입 이미지

Magnification/Minification 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);




사용자 삽입 이미지
사용자 삽입 이미지사용자 삽입 이미지Environment parameters (MODULATE | DECAL | BLEND | REPLACE)

// (위왼쪽) GL_RGB modulate = texture color * framebuffer color
 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);

// (위오른쪽) GL_RGB decal = texture color
 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);

// (아래왼쪽)
// GL_RGB blend = framebuffer color * (1 – texture color) + blend color * texture color
GLfloat blendcolor[] = {0.0, 1.0, 0.0, 0.5};
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_BLEND);
glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, blendcolor);

// (아래오른쪽)
GL_RGB replace = texture color
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
 



사용자 삽입 이미지

OpenGL Shading

http://dis.dankook.ac.kr/lectures/cg07/entry/lighting-예제

shading model – GL_FLAT/GL_SMOOTH
shademodel.cpp







사용자 삽입 이미지 사용자 삽입 이미지


 if (shading == GL_FLAT)
  glShadeModel(GL_FLAT);
 else if (shading == GL_SMOOTH)
  glShadeModel(GL_SMOOTH);


 glPushMatrix();
 glTranslatef(-1.0, 0.0, 0.0);
 glBegin(GL_TRIANGLES);
 glColor3f(1, 0, 0); // red
 glVertex3f(-1, -1, 4);
 glColor3f(0, 1, 0); // green
 glVertex3f(1, -1, 4);
 glColor3f(0, 0, 1); // blue
 glVertex3f(0, 1, 4);
 glEnd();
 glPopMatrix();
 
 glPushMatrix();
 glTranslatef(1.0, 0.0, 0.0);
 glBegin(GL_TRIANGLES);
 glColor3f(0, 0, 1); // blue
 glVertex3f(-1, -1, 4);
 glColor3f(0, 1, 0); // green
 glVertex3f(1, -1, 4);
 glColor3f(1, 0, 0); // red
 glVertex3f(0, 1, 4);
 glEnd();
 glPopMatrix();


gluQuadrics을 lighting을 사용한 예와 사용하지 않은 예






사용자 삽입 이미지 사용자 삽입 이미지

glutShapes을 lighting을 사용한 예와 사용하지 않은 예





사용자 삽입 이미지