그래픽스 프로그래밍 실습 #3

- Lighting, camera, texture mapping, alpha blending

(321190)

강사: 박경신

2007년 5월 11일

제출 방법: 2007년 6월 1일(금) 밤10시까지

(e-learning 강의실에 실행파일과 소스코드와 리포트를 전부 “학번1이름1_학번2이름2_숙제3.zip”으로 묶어서 제출하도록 합니다. 또한, 소스코트 폴더에 .cpp만 담지 말고 비주얼 스튜디오에서 만든 프로젝트 폴더를 담기 바랍니다.)

NOTE: 실습2의 모든 기능을 그대로 놓은 상태에서 추가 작업을 한다.

실습2의 전체 장면(scene)을 고화질 다각형 (high-resolution polygon)으로 바꾼다. (10점)

1) Floor는 GL_QUADS or GL_QUAD_STRIP을 이용하여 20x20으로 만든다.

Lighting model (30점)

1) 전체 장면(scene)에는 점광원 (point light) 또는 평행광원 (distant light)을

추가한다.

2) 그리고, 적당한 물체에 (예를 들어, 자동차 헤드라이트, 또는 가로등)에 스폿

라이트 (spot light)를 추가한다.

3) 's' KEY를 눌렀을 때, flat shading과 smooth shading으로 바뀐다.

4) ‘+’, '-' KEY를 눌렀을 때, 물체전체 재질의 shininess가 증가 혹은 감소한다.

5) ‘e' KEY를 눌렀을 때, light distance attenuation effect가 on/off된다.

Texture mapping, Alpha blending (30점)

1) 적당한 물체에 OpenGL Texture를 추가한다. 이때 적어도 2개 이상의 texture image을 사용한다.

2개의 다른 filter (GL_NEAREST, GL_LINEAR)를 사용한다.

2개의 다른 mapping modes (GL_REPEAT, GL_CLAMP)를 사용한다.

2) OpenGL의 alpha blending feature를 사용하여 물체 중에 적어도 하나는 semi-transparent하게 만든다. 예를 들어, 사각형에 알파 블랜딩을 적용하여 나무 텍스쳐를 매핑한다. 그리고 사각형 두개를 직각으로 교차시키고 각 사각형에 대해서 동일한 텍스쳐를 매핑시켜서 나무를 그리면 보다 입체적인 모습의 표현이 가능하다.

glEnable(GL_BLEND)

glBlendFunc() GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA

glColor4f(red, green, blue, alpha)를 사용하고, alpha값은 1-불투명, 0-투명

3) ‘t’ KEY를 눌렀을 때, texture가 on/off된다.

Camera control (extra 20점)

1) ‘1' KEY를 눌렀을 때, 1인칭 시점(camera viewpoint)으로 변한다.

마을(town)의 정중앙에서 안쪽을 바라보는 곳으로 위치한다.

2) 1인칭 시점에서 ‘LEFT’/‘RIGHT’ 화살키를 누르면 시점이 좌우로 20도씩

panning한다.

3) 1인칭 시점에서 'UP'/'DOWN' 화살키를 누르면 시점이 앞뒤로 2만큼 움직인다.

4) ‘3’ KEY를 눌렀을 때, 시점이 원래대로 마을 전체를 바라보는 3인칭 시점으로

변한다.

소스코드 주석처리, 창의성, 리포트 (30점)