Open GL

Similar documents
Open GL

Open GL

Microsoft PowerPoint - 13prac.pptx

Microsoft PowerPoint - lecture15-ch6.ppt

Microsoft PowerPoint - lecture16-ch6

PowerPoint 프레젠테이션

Microsoft PowerPoint - lecture3-ch2.ppt

Microsoft PowerPoint - lecture2-opengl.ppt [호환 모드]

Microsoft PowerPoint - lecture11-ch4

컴퓨터그래픽스 기본요소

<4D F736F F F696E74202D204347C3E2BCAEBCF6BEF D325FC4C4C7BBC5CDB1D7B7A1C7C8BDBA20B1E2BABBBFE4BCD22E >

Microsoft PowerPoint - lecture11-ch4.ppt

Microsoft Word - cg07-midterm.doc

Microsoft PowerPoint - lecture4-ch2.ppt

Microsoft Word - cg08-final-answer.doc

Microsoft Word - cg09-midterm.doc

Łø·ŸÕ=¤ ¬ ÇX±xÒ¸ 06 - Èpº– 1

chapter2.hwp

단국대학교멀티미디어공학그래픽스프로그래밍중간고사 (2011 년봄학기 ) 2011 년 4 월 26 일학과학번이름 중간고사 담당교수 : 단국대학교멀티미디어공학전공박경신 l 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤

歯Lecture2.PDF

컴퓨터그래픽스 소프트웨어

PowerPoint 프레젠테이션

Microsoft PowerPoint - lecture2-opengl.ppt

(Microsoft PowerPoint - JXQEUPXIEBNZ.ppt [\310\243\310\257 \270\360\265\345])

Microsoft PowerPoint - lecture3-ch2.ppt [호환 모드]

Microsoft Word - cg09-final-answer.doc

Microsoft Word - cg12-midterm-answer

서강대학교 공과대학 컴퓨터공학과 CSE4170 기초 컴퓨터 그래픽스 중간고사 (1/8) [CSE4170: 기초 컴퓨터 그래픽스] 중간고사 (담당교수: 임 인 성) 답은 연습지가 아니라 답안지에 기술할 것. 있는 변환 행렬은 일반적으로 어떤 좌표계 에서 어떤 좌표계로의

(Microsoft PowerPoint - CNVZNGWAIYSE.ppt [\310\243\310\257 \270\360\265\345])

슬라이드 1

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - 05geometry.ppt

(Microsoft PowerPoint - ADEFNJKEPXSQ.ppt [\310\243\310\257 \270\360\265\345])

(Microsoft PowerPoint - FZBDPQDCSHAN.ppt [\310\243\310\257 \270\360\265\345])

Microsoft Word - cg09-midterm-answer.doc

Microsoft PowerPoint - lecture18-ch8

Microsoft PowerPoint - [2009] 02.pptx

OpenGL 프로그래밍 가이드 : OpenGL 1.2 공식 학습 가이드 제3판

0503중간고사.dvi

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

Microsoft PowerPoint - additional01.ppt [호환 모드]

서강대학교 공과대학 컴퓨터공학과 CSE4170 기초 컴퓨터 그래픽스 중간고사 (1/7) [CSE4170: 기초 컴퓨터 그래픽스] 중간고사 (담당교수: 임 인 성) 답은 연습지가 아니라 답안지에 기술할 것. 답 안지 공간이 부족할 경우, 답안지 뒷면에 기술 하고, 해당

Microsoft Word - cg07-final.doc

Microsoft PowerPoint - lecture17-ch8.ppt

<4D F736F F F696E74202D204347C3E2BCAEBCF6BEF D315FC4C4C7BBC5CDB1D7B7A1C7C8BDBA20B0B3B0FC2E >

UI TASK & KEY EVENT

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

슬라이드 1

PowerPoint 프레젠테이션

Microsoft PowerPoint - lecture5-ch3.ppt [호환 모드]

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

Microsoft PowerPoint - 06-Body Data Class.pptx

Microsoft PowerPoint - lecture5-ch3 [호환 모드]

0503중간고사.dvi

BMP 파일 처리

Microsoft PowerPoint - lecture5-ch3

Microsoft PowerPoint - lecture11-ch5.ppt [호환 모드]

벡터(0.6)-----.hwp

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

Microsoft PowerPoint - ch07 - 포인터 pm0415

슬라이드 1

Chapter_02-3_NativeApp

서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (2/8) 다음과같이설정되어있는데, cam.pos[0] = 0.0, cam.pos[1] = 0.0, cam.pos[2] = 500.0; 이때의 cam.naxis[] 벡터의세원소값을기술하라. Figure

; struct point p[10] = {{1, 2, {5, -3, {-3, 5, {-6, -2, {2, 2, {-3, -3, {-9, 2, {7, 8, {-6, 4, {8, -5; for (i = 0; i < 10; i++){ if (p[i].x > 0 && p[i

슬라이드 1

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

(Microsoft PowerPoint - 07\300\345.ppt [\310\243\310\257 \270\360\265\345])

슬라이드 1

슬라이드 1

Structure and Interpretation of Computer Programs: Assignment 3 Seung-Hoon Na October 4, George (아래 3개의 문제에 대한 구현이 모두 포함된 george.rkt파일을 제출하시오.

PowerPoint Presentation

게임 기획서 표준양식 연구보고서

(Microsoft PowerPoint - \301\24608\260\255 - \261\244\277\370\260\372 \300\347\301\372)

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

문제지 제시문 2 보이지 않는 영역에 대한 정보를 얻기 위하여 관측된 다른 정보를 분석하여 역으로 미 관측 영역 에 대한 정보를 얻을 수 있다. 가령 주어진 영역에 장애물이 있는 경우 한 끝 점에서 출발하여 다른 끝 점에 도달하는 최단 경로의 개수를 분석하여 장애물의

12 강. 문자출력 Direct3D 에서는문자를출력하기위해서 LPD3DXFONT 객체를사용한다 LPD3DXFONT 객체생성과초기화 LPD3DXFONT 객체를생성하고초기화하는함수로 D3DXCreateFont() 가있다. HRESULT D3DXCreateFont

슬라이드 1

04_오픈지엘API.key

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

윈도우시스템프로그래밍

Why 3D Max?

슬라이드 1

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

단국대학교멀티미디어공학그래픽스프로그래밍기말고사 (2012 년봄학기 ) 2012 년 6 월 12 일학과학번이름 기말고사 담당교수 : 단국대학교멀티미디어공학전공박경신 l 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤

Microsoft PowerPoint - chap11-포인터의활용.pptx

Microsoft PowerPoint - lecture2-opengl.ppt [호환 모드]

adfasdfasfdasfasfadf

chap 5: Trees

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

Microsoft PowerPoint - lecture19-ch8.ppt

Microsoft PowerPoint - ch02-1.ppt

EEAP - Proposal Template

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>

11장 포인터

Microsoft PowerPoint - Chapter 9.pptx

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - chap06-2pointer.ppt

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

RVC Robot Vaccum Cleaner

Transcription:

Graphics OpenGL 컴퓨터그래픽스연구실

OpenGL 관련참고사이트 OpenGL 공식사이트 http://www.opengl.org/ Khronos Group http://www.khronos.org/ Nehe Productions http://nehe.gamedev.net/

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

프로젝트생성 [VS 6.0] (1/3) [File] [New] (Ctrl+N) [Win32 Console Application] 선택 Project Name 정한후 [OK] [An empty project] [Finish]

프로젝트생성 [VS 6.0] (2/3) [Project] [Settings ] (Alt+F7) Link 의 Object/library modules 에다음파일을추가 opengl32.lib glu32.lib glut32.lib glaux.lib

프로젝트생성 [VS 6.0] (3/3) [File] [New] (Ctrl+N) C++ Source File 선택 File 이름정한후 [OK] 완료

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

프로젝트생성 [VS 8.0] (2/3) [Project] [ 속성 ] (Alt+F7) [ 구성속성 ] [ 링커 ] [ 입력 ] 추가종속성에다음파일을추가 opengl32.lib glu32.lib glut32.lib glaux.lib

프로젝트생성 [VS 8.0] (3/3) 소스파일선택후우클릭 새항목추가 코드 C++ 파일 (.cpp) 이름선택 추가 (A) 완료

Example 예제및실행결과

Viewing void glulookat GLdouble 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) Default glutlookat(0.0, 0.0, 0.0, 0.0, 0.0, -100.0, 0.0, 1.0, 0.0);

Viewing void glulookat

View Volume void glortho GLdouble left, GLdouble right, GLdouble bottom, GLdouble top GLdouble znear, GLdouble zfar void glfrustum GLdouble left, GLdouble right, GLdouble bottom, GLdouble top GLdouble znear, GLdouble zfar void glperspective GLdouble fov, GLdouble aspect, GLdouble near, GLdouble fars fov : Field of View(degree : 0 ~ 180) aspect : Aspect Ratio(Width/Height) near : near clipping plane far : far clipping plane

View Volume void glfrustum

OpenGL 의그래픽기본요소 점 GL_POINTS 선 GL_LINES GL_LINE_STRIP GL_LINE_LOOP 도형 GL_POLYGON GL_TRIANGLES GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_QUAD_STRIP

OpenGL 의그래픽기본요소 점 glbegin(gl_points); glvertex3f(v1x, v1y, v1z); glvertex3f(v2x, v2y, v2z); glvertex3f(v3x, v3y, v3z); glvertex3f(v4x, v4y, v4z); glend(); v1 v4 v2 v3

OpenGL 의그래픽기본요소 선 (GL_LINES) glbegin(gl_lines); glvertex3f(v1x, v1y, v1z); glvertex3f(v2x, v2y, v2z); glvertex3f(v3x, v3y, v3z); glvertex3f(v4x, v4y, v4z); glend(); v1 v4 v2 v3

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(); v1 v4 v2 v3

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(); v1 v4 v2 v3

OpenGL 의그래픽기본요소 도형 (GL_TRIANGLES) glbegin(gl_triangles); glvertex3f(v1x, v1y, v1z); glvertex3f(v2x, v2y, v2z); glvertex3f(v3x, v3y, v3z); glend(); v1 v2 v3

OpenGL 의그래픽기본요소 도형 (GL_QUADS) glbegin(gl_quads); glvertex3f(v1x, v1y, v1z); glvertex3f(v2x, v2y, v2z); glvertex3f(v3x, v3y, v3z); glvertex3f(v4x, v4y, v4z); glend(); v1 v4 v2 v3

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(); v2 v1 v3 v6 v4 v5

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(); v1 v2 v3 v4 v5

OpenGL 의그래픽기본요소 도형 (GL_TRIANGLE_FAN) glbegin(gl_triangle_fan); glvertex3f(v1x, v1y, v1z); glvertex3f(v2x, v2y, v2z); v5 v4 v3 glvertex3f(v3x, v3y, v3z); v2 glvertex3f(v4x, v4y, v4z); glvertex3f(v5x, v5y, v5z); v1 glend();

OpenGL 의그래픽기본요소 도형 (GL_QUAD_STRIP) glbegin(gl_quad_strip); glvertex3f(v1x, v1y, v1z); glvertex3f(v2x, v2y, v2z); v1 v3 v5 glvertex3f(v3x, v3y, v3z); glvertex3f(v4x, v4y, v4z); glvertex3f(v5x, v5y, v5z); v2 v4 v6 glvertex3f(v6x, v6y, v6z); glend();

그래픽함수관련 ( 속성설정 ) glpointsize(glfloat size) 점의크기 gllinewidth(glfloat width) 선의두께 glgetfloatv(gl_line_size_range) 드라이버가지원하는최대선의두께를반환

그래픽함수관련 ( 속성설정 ) glshademodel(mode) 다각형내부채움모드설정 mode GL_FLAT: 다각형의내부를모두동일한색으로 GL_SMOOTH: 정점의색을 Weighted Average 보간 기본값

Example

Example

Example

직교투영함수 Clipping glortho(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);

직교투영함수 glortho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0); Projection glortho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); 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); => projection

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); (0, 200) (0, 100) (0, 0) (100, 0) (200, 0)

Example

GLUT 모델링 정 6 면체 void glutsolidcube(gldouble size); 물체겉면이칠해진형태 void glutwirecube(gldouble size); 물체뼈대만선으로표시 size : 정육면체모서리의길이

GLUT 모델링 원구 void glutsolidsphere(gldouble radius, GLint slices, GLint stacks); 물체겉면이칠해진형태 void glutwiresphere(gldouble radius, GLint slices, GLint stacks); 물체뼈대만선으로표시 radius : 원구의반지름 slices : 경선의수 ( 세로 ) stacks : 위선의수 ( 가로 )

GLUT 모델링 원환체 void glutsolidtorus(gldouble innerradius, GLdouble outerradius, GLint nsides, GLint rings); 물체겉면이칠해진형태 void glutwiretorus(gldouble innerradius, GLdouble outerradius, GLint nsides, GLint rings); 물체뼈대만선으로표시 innerradius : 원환체의안쪽반지름 outerradius : 원환체의바깥쪽반지름 nsides: 튜브단면을몇개의선분으로근사화 rings : 튜브윤곽을몇개의선분으로근사화

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축을따라서몇개의면으로근사화

GLUT 모델링 정 4 면체 void glutsolidtetrahedron(); 물체겉면이칠해진형태 void glutwiretetrahedron(); 물체뼈대만선으로표시

GLUT 모델링 정 20 면체 void glutsolidcosahedron(); 물체겉면이칠해진형태 void glutwirecosahedron(); 물체뼈대만선으로표시

GLUT 모델링 주전자 void glutsolidteapot(gldouble size); 물체겉면이칠해진형태 void glutwireteapot(gldouble size); 물체뼈대만선으로표시 size : 주전자의상대적크기

Example

Reshape Callback 함수 void glutreshapefunc(void(*func)(int width, int height)); 윈도우의크기 / 모양이바뀔때 GLUT 가호출하는콜백함수를등록시키는함수 width : 윈도우의새로운너비 height : 윈도우의새로운높이 ex) Void myreshape(int NewWidth, int NewHeight) { } void main(int argc, char** argv) { glutreshapefunc(myreshape); // 함수등록 }

Keyboard Callback 함수 void glutkeyboardfunc(void(*func)(unsigned char 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); // 함수등록 }

Keyboard Callback 함수

Mouse Click Callback 함수 void glutmousefunc(void(*func)(int button, int state, int x, int y)); 마우스이벤트가발생할때마다 GLUT 가호출하는마우스클릭콜백함수를등록시키는함수 button : 버튼의종류 GLUT_LEFT_BUTTON, GLUT_RIGHT_BUTTON, GLUT_MIDDEL_BUTTON state : 해당버튼이눌러진상태인지아닌지 GLUT_DOWN, GLUT_UP x: 마우스 x좌표,y: 마우스 y좌표

Mouse Click Callback 함수 void glutmousefunc(void(*func)(int button, int state, 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); // 함수등록 }

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); // 함수등록 }

Mouse 함수관련예제

Double Buffering 프레임버퍼 그래픽프로세스가프레임버퍼에영상을그리는역할을담당한다면비디오컨트롤러는그내용을읽어서화면에뿌림 비디오컨트롤러가프레임버퍼를읽는작업은매우빠른반면그래픽프로세서가프레임버퍼에쓰는작업은비디오컨트롤러가프레임버퍼를읽는속도에비해휠씬느림

Double Buffering 버퍼가하나일경우 그림 (a) 같이오른쪽에서왼쪽으로이동하는애니메이션을만들기위해서는화면에그림 (b) 를보여준후바로그림 (d) 를그려야함 만약프레임버퍼에기록하는속도가느리다면프레임버퍼에아직그림 (c) 의내용이기록되어있을수도있음 즉, 아직새로운내용이완전히기록되지않은중에비디오컨트롤러가프레임버퍼를읽어감으로써불완전한프레임내용이출력됨 (a) (b) (c) (d)

Double Buffering Front Buffer, Back Buffer 각각영상하나를온전히저장할수있는용량을가지고있음 Double Buffer 를사용하면아래그림과같이비디오컨트롤러가 Front Buffer 내용을읽고출력하는동안그래픽프로세서는 Back Buffer 에새로운내용을기록 만약비디오컨트롤러가쓰기를완전히마치면비디오컨트롤러는 Back Buffer 로스위칭하여새로기록된내용을읽어감 동시에그래픽프로세서는 Front Buffer 로스위칭하여다시새로운내용을기록

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); // 더블버퍼를사용한다. }

Idle Callback Function void glutidlefunc(void (*func)(void)) 처리할이벤트가없을때 GLUT 가호출하는콜백함수를등록시키는함수 ex> // 아이들콜백함수선언 void MyIdle(){} int main(int argc, char** argv) { glutidlefunc (MyIdle); // 아이들콜백함수등록 }

Double Buffering Double Buffering 예제

Vertex Array GLuint glfrontface(glenum mode) 시계방향으로감긴것이앞면인지반시계방향으로감긴것이앞면인지를설정 기본값 : glfrontface(gl_ccw); - 반시계방향을앞면으로설정한다. mode GL_CCW: 반시계방향 GL_CW: 시계방향 glfrontface(gl_ccw); // 반시계방향을앞면으로 glfrontface(gl_cw); // 시계방향을앞면으로

Vertex Array GLuint glcullface(glenum mode) 폴리곤의앞면혹은뒷면을그리기에서제거할지를설정한다. mode GL_FRONT : 앞면을컬링하고뒷면을보여준다. GL_BACK : 뒷면을컬링하고앞면을보여준다. 디폴트 : glcullface(gl_back); - 뒷면을컬링하고앞면을보여준다. glfrontface(gl_ccw); glcullface(gl_front); // 앞면을컬링하고뒷면을보여준다. glfrontface(gl_ccw); glcullface(gl_back); // 뒷면을컬링하고앞면을보여준다.

Vertex Array void glenable/gldisable (GLenum feature) OpenGL 기능 ( 상태 ) 를 enable/disable 한다. feature GL_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); // 컬링사용안함 // 앞, 뒷면다그려짐

Geometry Transformation void glmatrixmode(glenum mode) 현재행렬을설정 mode GL_MODELVIEW : 행렬연산이모델관측스택에적용된다. 장면상에서물체를이동할때사용한다. GL_PROJECTION : 행렬연산이투영행렬스택에적용된다. 클리핑공간을정의할때사용한다. GL_TEXTURE : 행렬연산이텍스쳐행렬스택에적용된다. 텍스쳐좌표를조작한다. void glloadidentity() 현재변환행렬을주어진단위행렬로바꾼다. ex> glmatrixmode(gl_modelview); glloadidentity();

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);

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 성분

Geometry Transformation 기하변환예제

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

Geometry Transformation Push/Pop 행렬예제

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); // 주변광을지정

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차감쇠값

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);

Lighting 스포트라이트 스포트라이트를설정할때에는위치성광원을설정한후스포트라이트에국한된몇가지속성들을설정해야한다. 스포트라이트절단각 (GL_SPOT_CUTOFF) 스포트라이트방향 (GL_SPOT_DIRECTION) 스포트라이트초점 (GL_SPOT_EXPONENT) 초점은스포트라이트가원뿔의축에어느정도집중되는지를결정원뿔의축으로부터멀어질수록빛은점차감쇠되며, 원뿔의가장자리에이르면빛이사라짐

Lighting 재질설정 void glmaterialfv(glenum face, GLenum pname, GLfloat *param) 조명계산에쓰일현재재질속성을정의한다. face : 객체의다각형들에재질이적용되는방식지정 GL_FRONT, GL_BACK, GL_FRONT_AND_BACK pname : 설정하고자하는속성 param : 속성에설정할값 pname 인자에사용하는상수들 상수 GL_AMBIENT GL_DIFFUSE GL_AMBIENT_AND_DIFFUSE GL_SPECULAR GL_SHININESS GL_EMISSION 의미재질의주변광색재질의분산광색재질의주변광과분산광색재질의반사광색반사율재질의방사광색

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 ( 단면 )

Lighting pname 인자 GL_LIGHT_MODEL_AMBIENT 특정한방향없이장면전체에고르게비춰지는주변광을적용 전역주변광 (Global Ambient Light) GL_LIGHT_MODEL_LOCAL_VIEWER 반사광의경우시점의위치에따라하이라이트의세기가좌우됨 OpenGL 에서는시점의위치를정의된곳에그대로위치시키기도하지만시선반대방향에따라서무한대로보내기도함 GL_TRUE로설정되면시점위치가물체에매우가까운것으로간주하여모든다각형마다별도의시점벡터가계산되고이렇게하면정확한반사광이계산되어사실적인결과를얻을수있으나계산시간이오래걸림 GL_FALSE로설정되면시점이시점벡터방향으로무한대거리에있는것으로간주하고모든폴리곤에대해동일한시점벡터를사용하므로계산시간을줄일수있음 GL_LIGHT_MODEL_TWO_SIDE 조명이다각형의뒷면에도적용될것인지를결정

Geometry Transformation Lighting 예제