All posts by kpark

실습작품

HW1 – 무피즈 (강현석)사용자 삽입 이미지
HW1 – 무피즈 (백승대)사용자 삽입 이미지HW2 – 캐릭터 (박찬호)사용자 삽입 이미지HW2 – 캐릭터 (원종찬)사용자 삽입 이미지HW2 – 캐릭터 (박재희)사용자 삽입 이미지HW3 – 캐릭터 동산 (정효진)사용자 삽입 이미지HW3 – 캐릭터 동산 (심지흠)사용자 삽입 이미지HW3 – 캐릭터 동산 (심세용)사용자 삽입 이미지




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

사용자 삽입 이미지/// init texture
void initTexture(char *filename, GLuint& textureID, GLint param=GL_REPEAT)
{
// 중간 생략
  glGenTextures(1, &textureID);
  glBindTexture(GL_TEXTURE_2D, textureID);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, param);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, param);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  glTexImage2D(GL_TEXTURE_2D, 0, numComponents == 3 ? GL_RGB : GL_RGBA, imageWidth, imageHeight,
      0, numComponents == 3 ? GL_RGB : GL_RGBA, GL_UNSIGNED_BYTE, imageBuffer);
  glBindTexture(GL_TEXTURE_2D, 0);
}

/// Draw
void draw()
{
 glBindTexture(GL_TEXTURE_2D, texID1);
 glBegin(GL_QUADS);
  glNormal3f(0, 0, 1);
  glTexCoord2i( __________________ );
  glVertex3f(-2.0, -1.0, 0.0);
  glTexCoord2i(__________________);
  glVertex3f(-0.1, -1.0, 0.0);
  glTexCoord2i(__________________);
  glVertex3f(-0.1, 1.0, 0.0);
  glTexCoord2i(__________________);
  glVertex3f(-2.0, 1.0, 0.0);
 glEnd();
}

OpenGL Texture Mapping

Texture binding, texture generate, texture filtering, texture subimage, texture mapping by procedural definition & using imagefile, mipmapping, texture environment setting (modulate/decal), texture distorting, texture transformation, flipbook animation, etc
http://dis.dankook.ac.kr/lectures/cg08/entry/texture-mapping-예제

Texture filtering & environment paramaters
http://dis.dankook.ac.kr/lectures/cg08/entry/texture-filtering-environment-parameters-예제

wrapping parameters (REPEAT | CLAMP)



사용자 삽입 이미지

magnification/minification filter parameters (NEAREST | LINEAR | LINEAR_MIPMAP_LINEAR)

사용자 삽입 이미지

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

Texture generation
http://dis.dankook.ac.kr/lectures/cg08/entry/texture-generation-예제


Multitexturing
http://dis.dankook.ac.kr/lectures/cg09/entry/OPENGL-Multitexturing

multipass-multitexturing사용자 삽입 이미지singpass-multitexturing사용자 삽입 이미지
Billboarding
http://dis.dankook.ac.kr/lectures/cg09/entry/OPENGL-Billboarding

Before Billboarding사용자 삽입 이미지
After Billboarding사용자 삽입 이미지

OpenAL soundnode class

OpenAL기반의 sound class와 soundnode class 추가
-기존 oglclass의 sound class 변경 (하나의 사운드 담당)
-soundnode class 추가
  +BackgroundMusic class (배경음) 한번/반복/루프모드에 따라 플레이
  +EnvironmentSound class (환경음) 일정시간이 지나면 랜덤플레이
  +LocalEffectSound class (지역음) 지정한 지역근처에 가면 플레이
        -지역음은 반드시 camera class하고 같이 사용해야 함!

// sound 객체 초기화
camera camera1(45, 1, 1.0f, 1000.0f);
Sound sounds;
Sound sounds2;
BackgroundMusic bgm;
EnvironmentSound ambientsound;
LocalEffectSound localsound1(&camera1);
LocalEffectSound localsound2(&camera1);

// createScene에서 사운드 정의
void createScene(node & root)
{
 // 중간생략..

 // 기존의 sound class 사용방법
 ALfloat sourcePos1[] = { 10., 2., 5.};
 ALfloat sourceVel1[] = { 0., 0., 0.};
 ALfloat sourcePos2[] = { -20., 2., 5.};
 ALfloat sourceVel2[] = { 0., 0., 0.};
 sounds.setSoundSource(“data/sound/stereo.wav”, sourcePos1, sourceVel1, 0.5f, AL_TRUE);
 //sounds.play(); // background sound play
 sounds2.setSoundSource(“data/sound/click.wav”, sourcePos2, sourceVel2, 1.0f, AL_FALSE);


 // 배경음 – 리스트에 음악을 계속 루프해서 플레이
 bgm.addSoundFile(“data/sound/BGM/네오+시티.wav”);
 bgm.addSoundFile(“data/sound/BGM/엘린+숲.wav”);
 bgm.addSoundFile(“data/sound/BGM/무릉.wav”);
 bgm.setMode(BackgroundMusic::LOOP);
 bgm.setVolume(0.2f);


 // 환경음 – 2초가 지나면 리스트에서 랜덤하게 사운드를 하나 선택해서 플레이
 ambientsound.addSoundFile(“data/sound/Env/Beetle Movement.wav”);
 ambientsound.addSoundFile(“data/sound/Env/songbird1.wav”);
 ambientsound.addSoundFile(“data/sound/Env/Purple Sandpipers Chirping.wav”);
 ambientsound.addSoundFile(“data/sound/Env/Frog Croaks.wav”);
 ambientsound.addSoundFile(“data/sound/Env/Forest Cicadas.wav”);
 ambientsound.setTime(2000.0f);
 ambientsound.setVolume(0.5f);


 // 지역음 – 해당지역에 가면 사운드가 플레이
 localsound1.addSoundFile(“data/sound/LocalEffect/water.wav”);
 localsound1.setPosition(sourcePos1);
 localsound2.addSoundFile(“data/sound/LocalEffect/Bee.wav”);
 localsound2.setPosition(sourcePos2);
 localsound2.setAttenuate(20.0f);
}

// 이벤트에 따른 사운드 플레이
void keyboard(unsigned char key, int x, int y)
{
// 중간 생략
  case ‘s’:
   sounds2.play();
   break;
}

// 지정한 사운드 이벤트에 따른 사운드 플레이
void update()
{
 g_CurrentTime = timeGetTime();
 g_DeltaTime = g_CurrentTime – g_PreviousTime;
 g_ElapsedTime = (float)(g_DeltaTime * 0.001);
 g_PreviousTime = g_CurrentTime;

 // 사운드 업데이트
 bgm.update(g_DeltaTime);
 ambientsound.update(g_DeltaTime);
 localsound1.update(g_DeltaTime);
 localsound2.update(g_DeltaTime);
}



9059764278.cpp