11
실실 실실 (5 실 11 실 ) 실실 실실 실실실실 실실 D.6 실실 실실실실 D.7 실실 실실실실 OpenGL 실 실실실 실실 실 실실실 10 실 2 실실 실실 실실 실실실실실 실실 실실 .

실습 내용 (5 월 11 일 )

  • Upload
    tirzah

  • View
    126

  • Download
    1

Embed Size (px)

DESCRIPTION

실습 내용 (5 월 11 일 ). 실습 내용 그래픽스 실습 D.6 조명 설정하기 D.7 재질 설정하기 OpenGL 의 조명과 음영 주 우석저 10 장 2 개의 광원 광원 애니메이션 숙제 없음. 조명과 음영을 위한 6 가지 작업. 조명 기능 활성화 (Enabling Lighting) glEnable(GL_LIGHTING), glDisable(GL_LIGHTING) 광원의 정의 (Light source) glLightfv 음영 모드의 정의 (Shading Mode) - PowerPoint PPT Presentation

Citation preview

Page 1: 실습 내용  (5 월  11 일 )

실습 내용 (5 월 11 일 )

실습 내용 그래픽스 실습

D.6 조명 설정하기 D.7 재질 설정하기

OpenGL 의 조명과 음영 주 우석저 10 장 2 개의 광원 광원 애니메이션

숙제 없음 .

Page 2: 실습 내용  (5 월  11 일 )

조명과 음영을 위한 6 가지 작업

조명 기능 활성화 (Enabling Lighting)– glEnable(GL_LIGHTING), glDisable(GL_LIGHTING)

광원의 정의 (Light source)– glLightfv

음영 모드의 정의 (Shading Mode)– glShadeModel(Gl_FLAT), glShadeModel(GL_SMOOTH)

법선벡터 정의 (Surface Normal)– glNormal3f(0.0, 1.0, 0.0), glEnable(GL_NORMALIZE)

물체면 특성 ( 재질 ) 의 정의 (Surface material)– glMaterialv

조명 모델의 정의 (Lighting Model)– glLightModelfv

Page 3: 실습 내용  (5 월  11 일 )

광원의 정의

광원의 활성화– glEnable(GL_LIGHT0), – GL_LIGHT0 에서 GL_LIGHT7 까지 총 8 개

광원의 종류– 위치성 광원 (w 값이 0 이 아닌 경우 )

glLightfv(GL_LIGHT0, GL_POSITION, MyLightPosition)– 방향성 광원 (Spotlight)

glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, MyDirection) glLightfv(GL_LIGHT0, GL_SPOT_CUTOFF, MySpotAngle) glLightfv(GL_LIGHT0, GL_SPOT_EXPONENT, 2.0)

광원의 색 glLightv(GL_LIGHT0, GL_AMBIENT, MyLightAmbient) glLightv(GL_LIGHT0, GL_DIFFUSE, MyLightDiffuse) glLightv(GL_LIGHT0, GL_SPECULAR, MyLightSpecular)

거리에 따른 빛의 약화 광원의 위치 제어

Page 4: 실습 내용  (5 월  11 일 )

광원의 정의

거리에 따른 빛의 약화 glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 1.0) glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 2.0) glLightf(GL_LIGHT0, GL_QUADRATIC_ATTENUATION, 3.0)

광원의 위치 제어 glLightfv ( … , GL_POSITION, … ) 고정 위치 광원 움직이는 광원 시점을 따라가는 광원

Page 5: 실습 내용  (5 월  11 일 )

물체면 특성 ( 재질 ) 의 정의

물체의 특성– 물체의 색 : 주변 반사 , 난반사 , 정반사– 매끄러움 : 광택 계수– 특성 정의

glMaterialv(GL_FRONT, GL_AMBIENT, MyMaterialAmbient); glMaterialv(GL_FRONT, GL_DIFFUSE, MyMaterialDiffuse); glMaterialv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, MyMaterialDiffuse); glMaterialv(GL_FRONT, GL_SPECULAR, MyMaterialSpecular); glMaterialv(GL_FRONT, GL_SHINENESS, MyShineness);

– 발광체 스스로 빛을 내지만 광원으로는 작용하지 않음 . glMaterialv(GL_FRONT, GL_EMISSION, Emission)

Page 6: 실습 내용  (5 월  11 일 )

조명 모델 정의

전역 주변광– glLightModelfv(GL_LIGHT_MODEL_AMBIENT, MyGlobalAmbient);

시점 위치– glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE); //

시점의 위치가 물체에 가까운 경우– glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_FALSE); //

시점의 위치가 물체에 먼 경우

양면 조명– glLightModelfv(GL_LIGHT_MODEL_TWO_SIDED, GL_TRUE); //

양면 모두에 광원이 적용된다 .– glLightModelfv(GL_LIGHT_MODEL_TWO_SIDED, GL_FALSE);

Page 7: 실습 내용  (5 월  11 일 )

D.6 조명 설정하기

D4. PerspectiveSolar 프로젝트로 시작한다 . 태양계 애니메이션에 광원을 추가한다 . 전체 조명 ( 주변광 )

– OpenGL 프로그램에 전체 조명을 추가하려면 먼저 조명의 사용을 알려야 한다 .

glEnable(GL_LIGHTING); – 다음으로 해야 할 일은 조명 효과 모델을 설정하는 것이다 .

glLightModelfv(GLenum pname, const GLfloat *params); pname 에는 보통 GL_LIGHT_MODEL_AMBIENT 를 사용한다 . params 에는 주변광의 색과 밝기 값을 저장한 float array 를

대입한다 .

Page 8: 실습 내용  (5 월  11 일 )

D.6 조명 설정하기

특정 광원을 설정하기 위해서는 다음과 같은 과정을 거친다.– 광원의 주변광과 난반사광 값을 정하고, 이 값을 광원에 설정한다. – SetupRC() 에서 설정하면 된다.

GLfloat ambientLight[] = {0.3f, 0.3f, 0.3f, 1.0f};GLfloat diffuseLight[] = {0.7f, 0.7f, 0.7f, 1.0f};glLightfv(GL_LIGHT0, GL_AMBIENT, ambientLight);glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseLight);

– 광원을 활성화한다. 역시 SetupRC() 에서 설정한다. glEnable(GL_LIGHT0);

– OnSize() 에서 광원의 위치를 설정한다. GLfloat lightPos[] = { -50.0f, 50.0f, 100.0f, 1.0f };

glLightfv(GL_LIGHT0, GL_POSITION, lightPos);

– OpenGL에서는 조명도 변환 행렬의 영향을 받으므로 하나의 기하학적 객체로 다루는 것이 타당하다.

Page 9: 실습 내용  (5 월  11 일 )

D.7 재질 설정하기

객체의 재질– 재질의 정의에 따라 빛이 객체에 반사될 때 객체 표면에 어떤 효과가 나타나는

지가 달라진다 . 먼저 설정하는 명령을 내린다 . glEnable(GL_COLOR_MATERIAL);

– OpenGL 에서는 5 가지의 재질 성분을 가지고 물체의 재질을 표현 . 현재 색상에 하나 이상의 재질 속성을 지정하는 것이 가능하다 .

– DIFFUSE Reflection , AMBIENT Reflection , SPECULAR Reflection , SHINENESS , EMISSION

어떤 모드를 설정할 것인지는 다음의 함수를 사용하여 선택할 수 있다 . 사용자가 색상 값만 입력하면 알아서 해당 조명에 대한 재질의 속성을 계산해준다 .

– glColorMaterial(enum face, enum mode);– face 는 현재 색이 영향을 주는 면으로 FRONT, BACK 또는 FRONT_AND_BACK

를 지정할 수 있다 . – mode 는 AMBIENT, DIFFUSE, SPECULAR, SHINENESS, EMISSION, AMBIENT_AN

D_DIFFUSE 중에서 선택한다 .

Page 10: 실습 내용  (5 월  11 일 )

D.7 재질 설정하기

OpenGL 에서 조명 및 재질을 정의함수 . – glMaterial{ifv}(enum face, enum mode, T param);– glLight{ifv}(enum face, enum mode, T param);– glLightModel{ifv}(enum face, enum mode, T param);

Page 11: 실습 내용  (5 월  11 일 )

Mode 값의 종류

Material Parameter(Material)

Light Source Parameters(LIGHT)

Lighting Model Parameters(LightModel)

AMBIENT AMBIENT LIGHT_MODEL_AMBIENT

DIFFUSE DIFFUSE LIGHT_MODEL_LOCAL_VIEWER

AMBIENT_AND_DIFFUSE

SPECULAR LIGHT_MODEL_TWO_SIDE

SPECULAR POSITION LIGHT_MODEL_COLOR_CONTROL

EMISSION SPOT_DIRECTION

SHININESS SPOT_EXPONENT

COLOR_INDEXES SPOT_CUTOFF

CONSTANT_ATTENUATION

LINEAR_ATTENUATION

QUADRATIC_ATTENUATION