Transcript
Page 1: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

Graphics

Graphics Lab @ Korea Universityhttp://kucg.korea.ac.kr

OpenGL

컴퓨터 그래픽스 연구실

Page 2: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea Universityhttp://kucg.korea.ac.kr

OpenGL 관련 참고 사이트

OpenGL 공식 사이트

http://www.opengl.org/

Khronos Grouphttp://www.khronos.org/

Nehe Productionshttp://nehe.gamedev.net/

Page 3: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

OpenGL 파일 셋팅

압축을 푼 후 다음 경로로 파일을 복사헤더 파일 (glut.h)

Microsoft Visual Studio\VC98\Include\GL (6.0)or Microsoft Visual Studio 8\VC\Include (8.0)

정적 라이브러리 파일 (glut32.lib & glut.def)Microsoft Visual Studio\VC98\Lib (6.0)

or Microsoft Visual Studio 8\VC\Lib (8.0)

동적 라이브러리 파일 (glut32.dll)C:\WINDOWS\system32

http://kucg.korea.ac.kr

Page 4: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

프로젝트 생성 [VS 6.0] (1/3)

[File] [New] (Ctrl+N)[Win32 Console Application] 선택

Project Name 정한 후 [OK][An empty project] [Finish]

http://kucg.korea.ac.kr

Page 5: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

프로젝트 생성 [VS 6.0] (2/3)

[Project] [Settings…] (Alt+F7)Link 의 Object/library modules에 다음 파일을 추가

opengl32.lib glu32.lib glut32.lib glaux.lib

http://kucg.korea.ac.kr

Page 6: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

프로젝트 생성 [VS 6.0] (3/3)

[File] [New] (Ctrl+N)C++ Source File 선택

File 이름 정한 후 [OK]

완료

http://kucg.korea.ac.kr

Page 7: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

프로젝트 생성 [VS 8.0] (1/3)

[File] [New] [Project] (Ctrl+Shift+N)Visual C++ Win32 Win32 Console App이름 정한 후 [OK]빈 프로젝트 선택

http://kucg.korea.ac.kr

Page 8: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

프로젝트 생성 [VS 8.0] (2/3)

[Project] [속성] (Alt+F7)[구성 속성] [링커] [입력]추가 종속성에 다음 파일을 추가

opengl32.lib glu32.lib glut32.lib glaux.lib

http://kucg.korea.ac.kr

Page 9: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

프로젝트 생성 [VS 8.0] (3/3)

소스 파일 선택 후 우 클릭 새 항목 추가코드 C++파일(.cpp) 이름 선택 추가(A)

완료

http://kucg.korea.ac.kr

Page 10: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

Example

예제 및 실행결과

http://kucg.korea.ac.kr

Page 11: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

void gluLookAtGLdouble eyex, GLdouble eyey, GLdouble eyez, GLdouble atx, GLdouble aty,GLdouble atz, GLdouble upx, GLdouble upy, GLdouble upz

eyex, eyey, eyez : Camera , Position(x,y,z)atx, aty, atz : Camera Focus(x,y,z)upx, upy, upz : Camera Upvector(gradient)

DefaultglutLookAt(0.0, 0.0, 0.0, 0.0, 0.0, -100.0, 0.0, 1.0, 0.0);

Viewing

Page 12: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

void gluLookAt

Viewing

Page 13: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

void glOrthoGLdouble left, GLdouble right, GLdouble bottom, GLdouble topGLdouble zNear, GLdouble zFar

void glFrustumGLdouble left, GLdouble right, GLdouble bottom, GLdouble topGLdouble zNear, GLdouble zFar

void glPerspectiveGLdouble fov, GLdouble aspect, GLdouble near, GLdouble fars

fov : Field of View(degree : 0 ~ 180)aspect : Aspect Ratio(Width/Height)near : near clipping planefar : far clipping plane

View Volume

Page 14: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

void glFrustum

View Volume

Page 15: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

OpenGL의 그래픽 기본 요소

점GL_POINTS

선GL_LINESGL_LINE_STRIPGL_LINE_LOOP

도형GL_POLYGONGL_TRIANGLESGL_TRIANGLE_STRIPGL_TRIANGLE_FANGL_QUAD_STRIP

http://kucg.korea.ac.kr

Page 16: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

OpenGL의 그래픽 기본 요소

점glBegin(GL_POINTS);

glVertex3f(v1x, v1y, v1z);glVertex3f(v2x, v2y, v2z);glVertex3f(v3x, v3y, v3z);glVertex3f(v4x, v4y, v4z);

glEnd();

http://kucg.korea.ac.kr

v1 v2

v3v4

Page 17: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

OpenGL의 그래픽 기본 요소

선(GL_LINES)glBegin(GL_LINES);

glVertex3f(v1x, v1y, v1z);glVertex3f(v2x, v2y, v2z);glVertex3f(v3x, v3y, v3z);glVertex3f(v4x, v4y, v4z);

glEnd();

http://kucg.korea.ac.kr

v1 v2

v3v4

Page 18: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

OpenGL의 그래픽 기본 요소

선(GL_LINE_STRIP)glBegin(GL_LINE_STRIP);

glVertex3f(v1x, v1y, v1z);glVertex3f(v2x, v2y, v2z);glVertex3f(v3x, v3y, v3z);glVertex3f(v4x, v4y, v4z);

glEnd();

http://kucg.korea.ac.kr

v1 v2

v3v4

Page 19: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

OpenGL의 그래픽 기본 요소

도형(GL_LINE_LOOP)glBegin(GL_LINE_LOOP);

glVertex3f(v1x, v1y, v1z);glVertex3f(v2x, v2y, v2z);glVertex3f(v3x, v3y, v3z);glVertex3f(v4x, v4y, v4z);

glEnd();

http://kucg.korea.ac.kr

v1 v2

v3v4

Page 20: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

OpenGL의 그래픽 기본 요소

도형(GL_TRIANGLES)glBegin(GL_TRIANGLES);

glVertex3f(v1x, v1y, v1z);glVertex3f(v2x, v2y, v2z);glVertex3f(v3x, v3y, v3z);glEnd();

http://kucg.korea.ac.kr

v1 v2

v3

Page 21: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

OpenGL의 그래픽 기본 요소

도형(GL_QUADS)glBegin(GL_QUADS);

glVertex3f(v1x, v1y, v1z);glVertex3f(v2x, v2y, v2z);glVertex3f(v3x, v3y, v3z);glVertex3f(v4x, v4y, v4z);

glEnd();

http://kucg.korea.ac.kr

v1 v2

v3v4

Page 22: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

OpenGL의 그래픽 기본 요소

도형(GL_POLYGON)glBegin(GL_POLYGON);

glVertex3f(v1x, v1y, v1z);glVertex3f(v2x, v2y, v2z);glVertex3f(v3x, v3y, v3z);glVertex3f(v4x, v4y, v4z);glVertex3f(v5x, v5y, v5z);glVertex3f(v6x, v6y, v6z);

glEnd();

http://kucg.korea.ac.kr

v1

v2

v3 v4

v6

v5

Page 23: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

OpenGL의 그래픽 기본 요소

도형(GL_TRIANGLE_STRIP)glBegin(GL_TRIANGLE_STRIP);

glVertex3f(v1x, v1y, v1z);glVertex3f(v2x, v2y, v2z);glVertex3f(v3x, v3y, v3z);glVertex3f(v4x, v4y, v4z);glVertex3f(v5x, v5y, v5z);

glEnd();

http://kucg.korea.ac.kr

v1

v2

v3

v4

v5

Page 24: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

OpenGL의 그래픽 기본 요소

도형(GL_TRIANGLE_FAN)glBegin(GL_TRIANGLE_FAN);

glVertex3f(v1x, v1y, v1z);glVertex3f(v2x, v2y, v2z);glVertex3f(v3x, v3y, v3z);glVertex3f(v4x, v4y, v4z);glVertex3f(v5x, v5y, v5z);

glEnd();

http://kucg.korea.ac.kr

v1

v2

v3

v4v5

Page 25: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

도형(GL_QUAD_STRIP)glBegin(GL_QUAD_STRIP);

glVertex3f(v1x, v1y, v1z);glVertex3f(v2x, v2y, v2z);glVertex3f(v3x, v3y, v3z);glVertex3f(v4x, v4y, v4z);glVertex3f(v5x, v5y, v5z);glVertex3f(v6x, v6y, v6z);

glEnd();

OpenGL의 그래픽 기본 요소

http://kucg.korea.ac.kr

v1

v2

v3

v4

v5

v6

Page 26: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

그래픽 함수 관련 (속성 설정)

glPointSize(Glfloat size)점의 크기

glLineWidth(Glfloat width)선의 두께

glGetFloatv(GL_LINE_SIZE_RANGE)드라이버가 지원하는 최대 선의 두께를 반환

http://kucg.korea.ac.kr

Page 27: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

그래픽 함수 관련 (속성 설정)

glShadeModel(mode)다각형 내부 채움 모드 설정

modeGL_FLAT: 다각형의 내부를 모두 동일한 색으로

GL_SMOOTH: 정점의 색을 Weighted Average 보간

기본값

http://kucg.korea.ac.kr

Page 28: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

Example

http://kucg.korea.ac.kr

Page 29: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

Example

Page 30: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

Example

Page 31: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

직교 투영 함수

ClippingglOrtho(GLdouble left, GLdouble right, GLdouble bottom,GLdouble top, GLdouble near, GLdouble far);

left : 클리핑 공간 좌측 끝의 좌표 값

right : 클리핑 공간 우측 끝의 좌표 값

bottom : 클리핑 공간 하단 끝의 좌표 값

top : 클리핑 공간 상단 끝의 좌표 값

near : 원점과 관측자 사이의 최대 거리

far : 원점과 관측자의 반대편 사이의 최대 거리

ex)glMatrixMode(GL_PROJECTION); //투영좌표계설정

glLoadIdentity(); //초기화

glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);

http://kucg.korea.ac.kr

Page 32: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

직교 투영 함수

http://kucg.korea.ac.kr

glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);

glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);

Projection

Projection

Page 33: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

직교 투영 함수

http://kucg.korea.ac.kr

=>

projection

glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);

=>

projection

glOrtho(-3.0, 3.0, -3.0, 3.0, -1.0, 1.0);

Page 34: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

Viewport 함수

윈도우의 영역을 설정한다.glViewport(GLint x, GLint y, GLsizei width, GLsizei height);

x : 좌 하단 x좌표

y : 좌 하단 y좌표

width : 너비

height : 높이

Ex)glutInitWindowSize(200, 200);glViewport(0, 0, 100, 100);

http://kucg.korea.ac.kr

(0, 0) (100, 0) (200, 0)

(0, 100)

(0, 200)

Page 35: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

Example

http://kucg.korea.ac.kr

Page 36: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

GLUT 모델링

정 6면체void glutSolidCube(GLdouble size);

물체 겉면이 칠해진 형태

void glutWireCube(GLdouble size);물체 뼈대만 선으로 표시

size : 정육면체 모서리의 길이

http://kucg.korea.ac.kr

Page 37: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

GLUT 모델링

원구void glutSolidSphere(GLdouble radius, GLint slices,GLint stacks);

물체 겉면이 칠해진 형태

void glutWireSphere(GLdouble radius, GLint slices,GLint stacks);

물체 뼈대만 선으로 표시

radius : 원구의 반지름

slices : 경선의 수 (세로)stacks : 위선의 수 (가로)

http://kucg.korea.ac.kr

Page 38: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

GLUT 모델링

원환체void glutSolidTorus(GLdouble innerRadius,GLdouble outerRadius, GLint nsides, GLint rings);

물체 겉면이 칠해진 형태

void glutWireTorus(GLdouble innerRadius, GLdoubleouterRadius, GLint nsides, GLint rings);

물체 뼈대만 선으로 표시

innerRadius : 원환체의 안쪽 반지름

outerRadius : 원환체의 바깥쪽 반지름

nsides: 튜브 단면을 몇 개의 선분으로 근사화

rings : 튜브 윤곽을 몇 개의 선분으로 근사화

http://kucg.korea.ac.kr

Page 39: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

GLUT 모델링

원뿔void glutSolidCone(GLdouble base, GLdouble height,GLint slices, GLint stacks);

물체 겉면이 칠해진 형태

void glutWireCone(GLdouble base, GLdouble height,GLint slices, GLint stacks);

물체 뼈대만 선으로 표시

base : 원뿔 밑면의 반지름

height : 원뿔 높이

slices : z축 둘레를 몇 개의 선분으로 근사화

stacks : z축을 따라서 몇 개의 면으로 근사화

http://kucg.korea.ac.kr

Page 40: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

GLUT 모델링

정 4면체void glutSolidTetrahedron();

물체 겉면이 칠해진 형태

void glutWireTetrahedron();물체 뼈대만 선으로 표시

http://kucg.korea.ac.kr

Page 41: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

GLUT 모델링

정 20면체void glutSolidcosahedron();

물체 겉면이 칠해진 형태

void glutWirecosahedron();물체 뼈대만 선으로 표시

http://kucg.korea.ac.kr

Page 42: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

GLUT 모델링

주전자void glutSolidTeapot(GLdouble size);

물체 겉면이 칠해진 형태

void glutWireTeapot(GLdouble size);물체 뼈대만 선으로 표시

size : 주전자의 상대적 크기

http://kucg.korea.ac.kr

Page 43: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

Example

http://kucg.korea.ac.kr

Page 44: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

Reshape Callback 함수

void glutReshapeFunc(void(*func)(int width, intheight));

윈도우의 크기/모양이 바뀔 때 GLUT가 호출하는콜백함수를 등록시키는 함수

width : 윈도우의 새로운 너비

height : 윈도우의 새로운 높이

ex)Void myReshape(int NewWidth, int NewHeight){ … }void main(int argc, char** argv){ …

glutReshapeFunc(myReshape); //함수 등록

… }

http://kucg.korea.ac.kr

Page 45: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

Keyboard Callback 함수

void glutKeyboardFunc(void(*func)(unsignedchar key, int x, int y));

ASCII 코드의 키보드 입력이 일어날 때마다 GLUT가호출하는 콜백함수를 등록시키는 함수

key : 눌러진 키

x : 마우스의 X좌표, y : 마우스의 Y좌표

ex)void myKeyboard(unsigned char key, int x, int y){ … }void main(int argc, char** argv){ …

glutKeyboardFunc(myKeyboard); // 함수 등록

… }

http://kucg.korea.ac.kr

Page 46: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

Keyboard Callback 함수

http://kucg.korea.ac.kr

Page 47: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

Mouse Click Callback 함수

void glutMouseFunc(void(*func)(int button, intstate, int x, int y));

마우스 이벤트가 발생할 때마다 GLUT가 호출하는마우스 클릭 콜백함수를 등록시키는 함수

button : 버튼의 종류

GLUT_LEFT_BUTTON , GLUT_RIGHT_BUTTON,GLUT_MIDDEL_BUTTON

state : 해당 버튼이 눌러진 상태인지 아닌지

GLUT_DOWN, GLUT_UPx : 마우스 x좌표, y : 마우스 y좌표

http://kucg.korea.ac.kr

Page 48: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

Mouse Click Callback 함수

void glutMouseFunc(void(*func)(int button, intstate, int x, int y));

ex)void myMouseClick(Glint button, GLint state, GLint x, GLint y){if(button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)

{ … }}void main(int argc, char** argv){ …glutMouseFunc(myMouseClick); // 함수 등록

… }

http://kucg.korea.ac.kr

Page 49: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

Mouse Motion Callback 함수

void glutMotionFunc(void(*func)(int x, int y));마우스 버튼을 누른 상태에서 마우스를 움직일 때호출되는 마우스 움직임 콜백함수를 등록시키는 함수

x : 마우스의 X좌표

y : 마우스의 Y좌표

ex)void myMouseMotion(GLint x, Glint y){ … }void main(int argc, char** argv){ …

glutMotionFunc(myMouseMotion); // 함수 등록

… }

http://kucg.korea.ac.kr

Page 50: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea University

Mouse 함수 관련 예제

http://kucg.korea.ac.kr

Page 51: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea Universityhttp://kucg.korea.ac.kr

Double Buffering

프레임 버퍼

그래픽 프로세스가 프레임 버퍼에 영상을 그리는 역할을

담당한다면 비디오 컨트롤러는 그 내용을 읽어서 화면에 뿌림

비디오 컨트롤러가 프레임 버퍼를 읽는 작업은 매우 빠른 반면

그래픽 프로세서가 프레임 버퍼에 쓰는 작업은 비디오

컨트롤러가 프레임 버퍼를 읽는 속도에 비해 휠씬 느림

Page 52: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea Universityhttp://kucg.korea.ac.kr

Double Buffering

버퍼가 하나일 경우그림(a)같이 오른쪽에서 왼쪽으로 이동하는 애니메이션을만들기 위해서는 화면에 그림(b)를 보여준 후 바로 그림 (d)를그려야 함

만약 프레임 버퍼에 기록하는 속도가 느리다면 프레임 버퍼에아직 그림(c)의 내용이 기록되어 있을 수도 있음

즉, 아직 새로운 내용이 완전히 기록되지 않은 중에 비디오컨트롤러가 프레임 버퍼를 읽어감으로써 불완전한 프레임내용이 출력됨

(a)

(b) (c) (d)

Page 53: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea Universityhttp://kucg.korea.ac.kr

Double Buffering

Front Buffer, Back Buffer각각 영상 하나를 온전히 저장할 수 있는 용량을 가지고 있음

Double Buffer를 사용하면 아래 그림과 같이 비디오 컨트롤러가Front Buffer 내용을 읽고 출력하는 동안 그래픽 프로세서는 BackBuffer에 새로운 내용을 기록

만약 비디오 컨트롤러가 쓰기를 완전히 마치면 비디오컨트롤러는 Back Buffer로 스위칭하여 새로 기록된 내용을읽어감

동시에 그래픽 프로세서는 Front Buffer로 스위칭하여 다시 새로운 내용을기록

Page 54: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea Universityhttp://kucg.korea.ac.kr

Double Buffering

void glutInitDisplayMode(unsigned int mode)GLUT 윈도우의 디스플레이 모드를 초기화한다.mode: 초기화와 관련된 상수 값

void glutSwapBuffers(void)현재 GLUT 윈도우가 Double Buffering 모드로 실행될 때, 이함수는 OpenGL 파이프라인을 모두 실행시킨 후 버퍼 스위칭

ex)//마우스 움직임 콜백 함수 선언

void MyDisplay() { glutSwapBuffers(); //버퍼를 교환한다. }

int main(int argc, char** argv)

{

glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); //더블 버퍼를 사용한다.

}

Page 55: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea Universityhttp://kucg.korea.ac.kr

Idle Callback Function

void glutIdleFunc(void (*func)(void))처 리 할 이 벤 트 가 없 을 때 GLUT 가 호 출 하 는콜백함수를 등록시키는 함수

ex>//아이들 콜백 함수 선언

void MyIdle(){}

int main(int argc, char** argv)

{

glutIdleFunc (MyIdle); //아이들 콜백 함수 등록

}

Page 56: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea Universityhttp://kucg.korea.ac.kr

Double Buffering

Double Buffering 예제

Page 57: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea Universityhttp://kucg.korea.ac.kr

Vertex Array

GLuint glFrontFace(GLenum mode)시계 방향으로 감긴 것이 앞면인지 반시계 방향으로 감긴 것이 앞면인지를 설정

기본값 : glFrontFace(GL_CCW); - 반시계 방향을 앞면으로 설정한다.mode

GL_CCW: 반시계 방향

GL_CW: 시계 방향

glFrontFace(GL_CCW);

//반시계방향을 앞면으로

glFrontFace(GL_CW);

//시계방향을 앞면으로

Page 58: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea Universityhttp://kucg.korea.ac.kr

Vertex Array

GLuint glCullFace(GLenum mode)폴리곤의 앞면 혹은 뒷면을 그리기에서 제거할지를 설정한다.

modeGL_FRONT : 앞면을 컬링하고 뒷면을 보여준다.GL_BACK : 뒷면을 컬링하고 앞면을 보여준다.

디폴트 : glCullFace(GL_BACK); - 뒷면을 컬링하고 앞면을 보여준다.

glFrontFace(GL_CCW);

glCullFace(GL_FRONT);

//앞면을 컬링하고 뒷면을 보여준다.

glFrontFace(GL_CCW);

glCullFace(GL_BACK);

//뒷면을 컬링하고 앞면을 보여준다.

Page 59: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea Universityhttp://kucg.korea.ac.kr

Vertex Array

void glEnable/glDisable (GLenum feature)OpenGL 기능(상태)를 enable/disable한다.

featureGL_CULL_FACE : 폴리곤 컬링 기능

디폴트 : glDisable(GL_CULL_FACE); - 컬링 기능을 사용하지 않는다.

glFrontFace(GL_CCW);

glCullFace(GL_BACK);

glEnable(GL_CULL_FACE);

//킬링 사용

//앞면만 그려짐

glFrontFace(GL_CCW);

glCullFace(GL_BACK);

glDisable(GL_CULL_FACE);

//컬링 사용 안 함

//앞, 뒷면 다 그려짐

Page 60: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea Universityhttp://kucg.korea.ac.kr

Geometry Transformation

void glMatrixMode(GLenum mode)현재 행렬을 설정

modeGL_MODELVIEW : 행렬 연산이 모델 관측 스택에 적용된다.

장면 상에서 물체를 이동할 때 사용한다.GL_PROJECTION : 행렬 연산이 투영 행렬 스택에 적용된다.

클리핑 공간을 정의할 때 사용한다.GL_TEXTURE : 행렬 연산이 텍스쳐 행렬 스택에 적용된다.

텍스쳐 좌표를 조작한다.

void glLoadIdentity()현재 변환 행렬을 주어진 단위 행렬로 바꾼다.

ex>glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

Page 61: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea Universityhttp://kucg.korea.ac.kr

Geometry Transformation

void glLoadMatrixf(const GLfloat *M)현재 행렬을 주어진 행렬로 설정한다.

void glMultMatrixf(const GLfloat *M)현재 행렬을 주어진 행렬과 곱한다.

*M : 이 배열은 현재 변환 행렬로 설정될 4X4행렬을나타낸다 . 이 배열은 16개의 연속된 값을 가지며 , 열우선순위로 저장되어 있다.

ex> glMatrixMode(GL_MODELVIEW);

float m[] =

{

1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f,

0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f

};

glLoadMatrixf(m);

glMultiMatrixf(m);

Page 62: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea Universityhttp://kucg.korea.ac.kr

Geometry Transformation

void glTranslatef(GLfloat dx, GLfloat dy, GLfloat dz)현재 행렬을 이동 변환 행렬과 곱한다.

dx, dy, dz : x, y, z축 좌표 값

void glScalef(GLfloat sx, GLfloat sy, GLfloat sz)현재 행렬과 크기 변환 행렬을 곱한다.

sx, sy, sz : x, y, z 축에 대한 크기 변환 인수

void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z)현재 행렬과 회전 변환 행렬을 곱한다.

angle : 회전각을 도(degree)단위로 나타낸다.x, y, z : 회전축이 되는 방향 벡터의 x, y, z 성분

Page 63: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea Universityhttp://kucg.korea.ac.kr

Geometry Transformation

기하 변환예제

Page 64: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea Universityhttp://kucg.korea.ac.kr

Geometry Transformation

void glPushMatrix()현재 행렬을 행렬 스택에 push한다.

void glPopMatrix()현재 행렬을 행렬 스택에서 pop한다.

glPushMatrix(); //Push

GotoBodyCoordinates();

Draw_Body();

glPushMatrix(); //Push

GotoRightShoulderCoordinates();

Draw_RightUpperArm();

glPushMatrix(); //Push

GotoRightElbowCoordinates();

Draw_RightLowerArm ();

glPopMatrix(); //Pop

glPopMatrix(); //Pop

glPushMatrix(); //Push

GotoRightCoxaCoordinates();

Draw_RightUpperLeg();

glPushMatrix(); //Push

GotoRightKneeCoordinates();

Draw_RightLowerLeg();

glPopMatrix(); //Pop

glPopMatrix(); //Pop

glPopMatrix(); //Pop

Page 65: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea Universityhttp://kucg.korea.ac.kr

Geometry Transformation

Push/Pop 행렬 예제

Page 66: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea Universityhttp://kucg.korea.ac.kr

Lighting

void glLightfv(GLenum light, GLenum pname, const GLFloat* params)

사용 가능한 8개의 광원 중 하나를 광원 인자로 지정하여 광원의여러 가지 특성을 설정한다.

light어느 광원을 설정할지를 지정한다. (GL_LIGHT0 ~ GL_LIGHT7)

pname이 함수를 호출할 때 사용할 조명 인자를 지정한다.

params설정될 값들의 배열

ex>float ambientLight[] = {1.0f, 1.0f, 1.0f, 1.0f}; // 밝은 흰색 주변광

glLightfv(LIGHT0, GL_AMBIENT, ambientLight); // 주변광을 지정

Page 67: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea Universityhttp://kucg.korea.ac.kr

Lighting

glLightfv의 pname 인자에 넣을 수 있는 값

파라미터 명 기본 값 의미

GL_POSITION (0.0, 0.0, 1.0, 0.0) 광원 위치를 지정하는 좌표(x, y, z, w)

GL_SPOT_DIRECTION (0.0, 0.0, -1.0) 스포트라이트의 방향을 지정하는 벡터(x, y, z)

GL_SPOT_CUTOFF 180.0 스포트라이트 절단 각도

GL_SPOT_EXPONENT 0.0 스포트라이트 지수

GL_AMBIENT (0.0, 0.0, 0.0, 0.0) 주변광의 세기

GL_DIFFUSE (1.0, 1.0, 1.0, 1.0) 확산광의 세기

GL_SPECULAR (1.0, 1.0, 1.0, 1.0) 반사광의 세기

GL_CONSTANT_ATTENUNATION 1.0 불변 감쇠 값

GL_LINEAR_ATTENUATION 0.0 선형 감쇠 값

GL_QUADRATIC_ATTENUNATION 0.0 2차 감쇠 값

Page 68: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea Universityhttp://kucg.korea.ac.kr

Lighting

광원의 배치GL_POSITION

(x, y, z, w)에서 w = 0이 아니면 (x/w, y/w, z/w)에 위치한 위치성 광원을, w =0이면 좌표(x, y, z)로 빛이 들어오는 방향을 가지는 방향성 광원이 된다.방향성 광원

ex>

GLfloat LightPosition[] = {0.0, 1.0, 0.0, 0.0};

glLightfv(GL_LIGHT0, GL_POSITION, LightPosition);

GLfloat LightPosition[] = {-1.0, 1.0, 0.0, 0.0};

glLightfv(GL_LIGHT0, GL_POSITION, LightPosition);

Page 69: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea Universityhttp://kucg.korea.ac.kr

Lighting

스포트라이트스포트라이트를 설정할 때에는 위치성 광원을 설정한 후스포트라이트에 국한된 몇 가지 속성들을 설정해야 한다.

스포트라이트 절단각(GL_SPOT_CUTOFF)스포트라이트 방향(GL_SPOT_DIRECTION)스포트라이트 초점(GL_SPOT_EXPONENT)

초점은 스포트라이트가 원뿔의 축에 어느 정도 집중되는지를 결정

원뿔의 축으로부터 멀어질수록 빛은 점차 감쇠되며, 원뿔의 가장자리에이르면 빛이 사라짐

Page 70: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea Universityhttp://kucg.korea.ac.kr

Lighting

재질 설정void glMaterialfv(GLenum face, GLenum pname, GLfloat *param)

조명 계산에 쓰일 현재 재질 속성을 정의한다.face : 객체의 다각형들에 재질이 적용되는 방식 지정

GL_FRONT, GL_BACK, GL_FRONT_AND_BACKpname : 설정하고자 하는 속성

param : 속성에 설정할 값

pname 인자에 사용하는 상수들

상수 의미

GL_AMBIENT 재질의 주변광 색

GL_DIFFUSE 재질의 분산광 색

GL_AMBIENT_AND_DIFFUSE 재질의 주변광과 분산광 색

GL_SPECULAR 재질의 반사광 색

GL_SHININESS 반사율

GL_EMISSION 재질의 방사광 색

Page 71: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea Universityhttp://kucg.korea.ac.kr

Lighting

조명 모델들void glLightModeli(GLenum pname, GLint param)void glLightModelfv(GLenum pname, Glfloat* param)

조명 모델설정 함수pname : 조명 모델 인자를 지정한다.param : 주변광의 세기

pname 인자에 사용하는 상수들

상수 의미

GL_LIGHT_MODEL_AMBIENT 장면의 주변광 세기(RGBA) : 기본값은 (0.2, 0.2, 0.2, 1.0)

GL_LIGHT_MODEL_LOCAL_VIWER 시점의 국소 또는 무한 여부 : 기본값은 GL_FALSE(무한)

GL_LIGHT_MODEL_TWO_SIDE 단면 또는 양면 조명 : 기본값은 GL_FALSE (단면)

Page 72: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea Universityhttp://kucg.korea.ac.kr

Lighting

pname 인자GL_LIGHT_MODEL_AMBIENT

특정한 방향 없이 장면 전체에 고르게 비춰지는 주변광을 적용

전역 주변광(Global Ambient Light)

GL_LIGHT_MODEL_LOCAL_VIEWER반사광의 경우 시점의 위치에 따라 하이라이트의 세기가 좌우됨

OpenGL에서는 시점의 위치를 정의된 곳에 그대로 위치시키기도 하지만 시선반대방향에 따라서 무한대로 보내기도 함

GL_TRUE로 설정되면 시점 위치가 물체에 매우 가까운 것으로 간주하여 모든다각형마다 별도의 시점벡터가 계산되고 이렇게 하면 정확한 반사광이 계산되어사실적인 결과를 얻을 수 있으나 계산시간이 오래 걸림

GL_FALSE로 설정되면 시점이 시점벡터 방향으로 무한대 거리에 있는 것으로간주하고 모든 폴리곤에 대해 동일한 시점벡터를 사용하므로 계산시간을 줄일 수 있음

GL_LIGHT_MODEL_TWO_SIDE조명이 다각형의 뒷면에도 적용될 것인지를 결정

Page 73: Graphics - Korea Universitykucg.korea.ac.kr/.../tutor_/06OpenGLOverview_Programming.pdf · 2002-01-16 · KUCG Graphics Lab @ Korea University OpenGL 파일셋팅 압축을푼후다음경로로파일을복사

KUCG

Graphics Lab @ Korea Universityhttp://kucg.korea.ac.kr

Geometry Transformation

Lighting 예제


Top Related