Microsoft PowerPoint - lecture3-ch2.ppt

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

Microsoft PowerPoint - lecture2-opengl.ppt

Open GL

PowerPoint 프레젠테이션

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

04_오픈지엘API.key

chapter2.hwp

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

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

Microsoft PowerPoint - lecture4-ch2.ppt

컴퓨터그래픽스 기본요소

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

Microsoft Word - cg09-midterm.doc

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

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

Microsoft Word - cg07-midterm.doc

<4D F736F F F696E74202D204347C3E2BCAEBCF6BEF D325FC4C4C7BBC5CDB1D7B7A1C7C8BDBA20B1E2BABBBFE4BCD22E >

Open GL

2005CG01.PDF

PowerPoint 프레젠테이션

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

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

Week3

01-OOPConcepts(2).PDF

Microsoft PowerPoint - 06-Body Data Class.pptx

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

Open GL

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

Microsoft Word - cg12-midterm-answer

歯Lecture2.PDF

PCServerMgmt7

MAX+plus II Getting Started - 무작정따라하기

Microsoft PowerPoint cg01.ppt

Microsoft PowerPoint - lecture15-ch6.ppt

강의10

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 -

UML

Something that can be seen, touched or otherwise sensed

목차 제 1 장 inexio Touch Driver소개 소개 및 주요 기능 제품사양... 4 제 2 장 설치 및 실행 설치 시 주의사항 설치 권고 사양 프로그램 설치 하드웨

PowerPoint 프레젠테이션

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

untitled

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

K7VT2_QIG_v3

Microsoft Word - cg09-final-answer.doc

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

LCD Display

Microsoft PowerPoint APUE(Intro).ppt

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>

[ReadyToCameral]RUF¹öÆÛ(CSTA02-29).hwp

Microsoft PowerPoint - 13prac.pptx

UI TASK & KEY EVENT


슬라이드 1

Microsoft PowerPoint - lecture16-ch6

K&R2 Reference Manual 번역본

Orcad Capture 9.x

슬라이드 1

<32B1B3BDC32E687770>

untitled

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

Microsoft Word - cg09-midterm-answer.doc

Microsoft PowerPoint - lecture5-ch3

BMP 파일 처리

<4D F736F F F696E74202D204347C3E2BCAEBCF6BEF D315FC4C4C7BBC5CDB1D7B7A1C7C8BDBA20B0B3B0FC2E >

PowerPoint 프레젠테이션

슬라이드 1

untitled

PowerPoint 프레젠테이션

05-class.key

김기남_ATDC2016_160620_[키노트].key

LIDAR와 영상 Data Fusion에 의한 건물 자동추출

1

Microsoft PowerPoint - polling.pptx

13주-14주proc.PDF

Å©·¹Àγ»Áö20p

Ⅱ. Embedded GPU 모바일 프로세서의 발전방향은 저전력 고성능 컴퓨팅이다. 이 러한 목표를 달성하기 위해서 모바일 프로세서 기술은 멀티코 어 형태로 발전해 가고 있다. 예를 들어 NVIDIA의 최신 응용프 로세서인 Tegra3의 경우 쿼드코어 ARM Corte

Microsoft PowerPoint - 09-Object Oriented Programming-3.pptx

6주차.key

63-69±è´ë¿µ

OpenGL 프로그래밍 가이드 제4판

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.


PowerPoint 프레젠테이션

Microsoft Word - cg08-final-answer.doc

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

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

그래픽스 기본요소의 속성

Microsoft PowerPoint - lecture18-ch8

Microsoft PowerPoint - [2009] 02.pptx

Microsoft PowerPoint - lecture11-ch4.ppt

Solaris Express Developer Edition

Microsoft PowerPoint - 07-Data Manipulation.pptx

untitled


untitled

UI TASK & KEY EVENT

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

; 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

Microsoft PowerPoint - lecture11-ch4

Transcription:

Coordinate Systems Graphics Programming 321190 2007년봄학기 3/13/2007 박경신 2D Cartesian Coordinate Systems 3D Cartesian Coordinate Systems Cartesian Coordination Systems -x +y y-axis x-axis +x Two axes: x-axis and y-axis, two straight lines perpendicular to each other, both pass through origin and extends infinitely in two opposite directions 원점 (Origin) 은좌표계의중심에위치하고있고값은 (0, 0) 이다. y z z y x 왼손좌표계 (Left-handed coordinate system) 는 x+ 는오른쪽, y+ 는위쪽, z+ 는화면안쪽. 오른손좌표계 (Righthanded coordinate system) 는 x+ 는왼쪽, y+ 는위쪽, z+ 는화면안쪽. -y x

Screen Coordinate System 3D Coordinate Systems (0, 0) x-axis +x Screen coordinate system 은원점 (Origin) 이화면의좌측상단에위치하고값은 (0, 0) 이다. x+ 오른쪽. y+ 아래쪽. 1 unit = 1 pixel y x OpenGL은오른손좌표계 (Righthanded coordinate system) x+ 오른쪽. y+ 위쪽. z+ 화면밖으로나오는방향. +y y-axis z 3D Coordinate Systems y z Direct3D는왼손좌표계 (Lefthanded coordinate system). x+ 오른쪽. y+ 위쪽. z+ 화면안쪽으로들어가는방향. Graphics Programming OpenGL & GLUT API를사용한그래픽스프로그래밍소개 OpenGL Programming Guide red book OpenGL Reference Manual blue book OpenGL Shading Language orange book x

OpenGL Architecture OpenGL Polynomial Evaluator Per Vertex Operations & Primitive Assembly OpenGL 은그래픽스파이프라인 (graphics pipeline) 을모델로사용하는 3D graphics library 이다. OpenGL 은 window system 에독립적인 API OpenGL 은 operating system 에독립적인 API OpenGL libraries: GL - graphics CPU Display List Rasterization Per Fragment Operations Frame Buffer GLU - utilities GLX (X window)/ WGL (Windows)/ AGL (Mac) / PGL (IBM) windowing toolkits GLUT multi-platform windowing API Texture Memory Pixel Operations GLUT (OpenGL Utility Toolkit) GLUT Program Structure Mark J. Kilgard가개발한 portable windowing and interaction API Prefix glut 로시작 대부분의 window system 에보편적인기능들을 wrapping 한상위 interface 제공 (portable across all PC and workstation OS platforms) OpenGL 이제공하는범위보다상위수준의 utility function 도제공 UNIX/X-window 에서개발된 code 를그대로재사용가능 Win32, MFC, Xlib 을알필요가없음 그러나 Window system 의기능을제한적으로만이용가능

GLUT Initialization GLUT Initialization void glutinit(int *argc, char **argv) Buffer GLUT BIT MASK Purpose GLUT와 OpenGL환경을초기화. 인자 (augment) 에는 main의인자를그대로건네줌 void glutinitdisplaymode(unsigned int mode) 화면에그래픽이어떻게그려질지를지정하는디스플레이모드 (display mode) 를설정 인자 mode는 GLUT 기호상수 (symbolic GLUT constant) 를사용 GLUT_SINGLE는싱글버퍼를사용한다는의미 GLUT_RGB는색의지정을RGB로사용한다는의미 Color buffer GLUT_RGBA GLUT_RGB GLUT_INDEX GLUT_ALPHA GLUT_SINGLE GLUT_DOUBLE GLUT_STEREO GLUT_LUMINANCE Use RGB color Use color indexing Single-buffer Double-buffer GLUT_MULTISAMPLING Other buffers GLUT_ACCUM GLUT_DEPTH Allow depth-buffer GLUT_STENCIL GLUT Display Mode GLUT Initialization void glutinitwindowposition(int x, int y) 화면에서디스플레이될윈도우의초기위치지정 void glutinitwindowsize(int width, int height) 디스플레이될윈도우의크기지정 ( 크기는 pixel 단위로지정 ) void glutinitwindowposition(50, 100); void glutinitwindowsize(400, 300); GLUT Window Management int glutcreatewindow(char *name) 윈도우를여는함수 인자 name 은윈도우의이름이타이틀바에표시됨 int glutcreatesubwindow(int win, int x, int y, int w, int h) void glutsetwindow(int win), int glutgetwindow(void) void glutdestroywindow(int win) void glutpostredisplay(void) 윈도우가새로그려져야할필요가있는경우를표시하는일을한다. void glutswapbuffers(void) 더블버퍼 (double buffer) 일경우현재윈도우의버퍼를 swap 한다. void glutpositionwindow(int x, int y) void glutreshapewindow(int w, int h) 현재윈도우의크기가바뀔때부른다.

GLUT Window Management void glutfullscreen(void) void glutpopwindow(void) void glutpushwindow(void) void glutshowwindow(void), void gluthidewindow(void), void gluticonifywindow(void) void glutsetwindowtitle(char *name), void glutseticontitle(char * name) void glutsetcursor(int cursor) GLUT_CURSOR_RIGHT_ARROW, GLUT_CURSOR_LEFT_ARROW, GLUT_CURSOR_INFO, GLUT_CURSOR_DESTROY, GLUT_CURSOR_HELP, GLUT_CURSOR_CYCLE, GLUT_CURSOR_SPRAY, GLUT_CURSOR_WAIT, GLUT_CURSOR_TEXT, GLUT Main Loop void glutmainloop(void) GLUT 메인루프. 이함수의호출로프로그램은이벤트를기다리는상태임. Main loop Repeat Forever: If Empty? (EventQueue) Then Invoke function CallbackTable[Idle]. Else 1. Let Event = Dequeue(EventQueue). 2. Let Type = Type field of Event. 3. Let Param = Parameters field of Event. 4. Invoke function CallbackTable[Type] with Param as parameters. Event Driven Interaction in GLUT Event Driven Interaction in GLUT 응용프로그램 (Application Program) GLUT 에게 Callback Table 에함수를등록시켜줄것을요청 GLUT main loop 를시작 ( 프로그램종료시까지실행됨 ) 장치관리자 (Device Manager) 마우스나키보드에서발생되는인터럽트 (interrupt) 에의해활성화됨 이벤트큐 (event queue) 에이벤트정보를넣는것으로인터럽트를처리함. 디스패쳐반복작업 (GLUT Dispatcher Repeatedly) 장치관리자로부터이벤트에대한정보를얻음 Callback Table에서부터발생한이벤트에해당되는함수를찾아실행

GLUT Events GLUT 의 Events 는아래와같다 : Key pressed Key released Mouse button pressed Mouse button released Mouse moved Mouse entered/left window Window resize Window needs redrawing Menu selection Special devices tablet, space, dial/button box Timer elapsed Idle GLUT Callbacks GLUT defines a basic program structure - an event loop, with callback functions. callback, a function that you provide for other code to call when needed; the "other code" is typically in a library GLUT uses callbacks for drawing, keyboard & mouse input, and other events. Whenever the window must be redrawn, your drawing callback is called. Whenever an input event occurs, your corresponding callback is called. GLUT Callback Registration void glutdisplayfunc(void (*func)(void)) 현재실행되는윈도우를실제로보여주는 ( 즉, 그림을그리는 ) callback 함수포인터를지정한다. 인자 (argument) 는 display callback 함수 void glutoverlaydisplayfunc(void (*func)(void)) void glutreshapefunc(void (*func)(int w, int h)) 윈도우의크기가변할때호출하는 callback 함수를지정한다. void glutidelfunc(void (*func)(void)) IDEL 인상태일경우호출되는 callback 함수를지정한다. void gluttimerfunc(unsigned int msecs, void (*func)(int value), value) Timer (millisecond 단위 ) 호출 GLUT Callback Registration void glutkeyboardfunc(void (*func)(unsigned char key, int x, int y)) Keyboard 의 ACII-character key 가눌렸을때 callback void glutkeyboardupfunc void glutspecialfunc(void (*func)(int key, int x, int y)) Special keyboard (F1, F2,.., F12, directional key) 가눌렸을때 callback void glutspecialupfunc void glutmousefunc(void (*func)(int button, int state, int x, int y)) 마우스버튼이눌렸을때 callback void glutmotionfunc(void (*func)(int x, int y)) void glutpassivemotionfunc(void (*func)(int x, int y)) 마우스버튼이눌린상태에서마우스가움직일때 callback

GLUT Callback Registration glutspaceballmotionfunc glutspaceballrotatefunc glutspaceballbuttonfunc gluttabletmotionfunc gluttabletbuttonfunc glutmenustatusfunc glutbuttonboxfunc glutdialsfunc glutentryfunc glutvisibilityfunc clear.cpp /* minimal program to open & clear a window */ #include <GL/glut.h> void display() glclear(gl_color_buffer_bit); glflush(); void keyboard(unsigned char key, int x, int y) switch (key) case q : exit(0); break; int main(int argc, char** argv) glutinit(&argc, argv); glutinitdisplaymode(glut_single GLUT_RGB); glutinitwindowsize(200, 200); glutinitwindowposition(0,0); glutcreatewindow(argv[0]); glutdisplayfunc(display); glutkeyboardfunc(keyboard); glutmainloop(); simple.cpp Graphics Functions /* draws a white rectangle on a black background */ #include <GL/glut.h> void display(void) glclear(gl_color_buffer_bit); glbegin(gl_polygon); glvertex2f(-0.5, -0.5); glvertex2f(-0.5, 0.5); glvertex2f(0.5, 0.5); glvertex2f(0.5, -0.5); glflush(); void keyboard(unsigned char key, int x, int y) /* 변경없음 */ int main(int argc, char** argv) /* 변경없음 */ 기본요소함수 (Primitive functions) 속성함수 (Attribute functions) 관측함수 (Viewing functions) chap5 변환함수 (Transformation functions) chap4 입력함수 (Input functions) GLUT chap3 제어함수 (Control functions) GLUT 질의함수 (Query functions)

Graphics Functions 기본요소함수 (Primitive functions) 저수준객체 (Low-level object) 을정의 Points, line segments, polygons, pixels, texts, curves, surfaces 속성함수 (Attribute functions) 기본요소가화면상에나타날수있는방법을제어 Color, line thickness, pattern to fill the polygon,.. 관측함수 (Viewing functions) 합성카메라 (synthetic camera) 모델 - 카메라위치, 방향, 렌즈 Viewport, clipping,.. 변환함수 (Transformation functions) 물체의회전 (rotation), 이동 (translation), 크기변환 (scaling) Graphics Functions 입력함수 (Input functions) 키보드, 마우스, 테블렛등입력장치를다루는함수 제어함수 (Control functions) 윈도우시스템과통신을가능하게하고, 프로그램초기화, 에러처리등 Close, open, resolution setting, mode setting,.. 질의함수 (Query functions) 그래픽스시스템의내부적인상태 (internal states) 이나속성 (properties) 정보 OpenGL Syntax Basic OpenGL Syntax 함수 (function) 에 prefix gl 사용 E.g.: glbegin, glclear, glcopypixels, glpolygonmode 기호상수 (symbolic constant) 에 prefix GL 사용 & 각각의단어는 _ 로연결 E.g.: GL_2D, GL_RGB, GL_CCW, GL_POLYGON, GL_AMBIENT_AND_DIFFUSE 자료타입 (data type) 에 prefix GL E.g. GLbyte, GLshort, GLint, GLfloat, GLdouble, GLboolean OpenGL Functions OpenGL함수이름은 gl 로시작 함수인자 (argument) 가하나인경우 : 함수인자 (argument) 를여러개받는경우 :

OpenGL Constants OpenGL 의상수 (Constant) 는함수인자에사용 상수의이름은전부대문자를사용하며 GL 로시작 : e.g. glbegin() 에들어갈수있는인자들 (arguments) 의예 : GL_POINTS GL_LINES GL_TRIANGLES GL_POLYGON OpenGL State GL rendering consists of geometry + state Both are passed to graphics hardware via function calls To draw something, the necessary state attributes (e.g. color) are set first. Then, the geometry (e.g. triangle data) is passed State is retained until changed. State changes do not affect any geometry already drawn. OpenGL State State: Color Drawing style Material properties Light sources Texture Transformations simple.cpp #include <GL/glut.h> void display(void) glclear(gl_color_buffer_bit); glbegin(gl_polygon); glcolor3f(1.0, 0.0, 0.0); glvertex2f(-0.5, -0.5); glcolor3f(1.0, 1.0, 0.0); glvertex2f(-0.5, 0.5); glcolor3f(0.0, 1.0, 0.0); glvertex2f(0.5, 0.5); glcolor3f(0.0, 0.0, 1.0); glvertex3f(0.5, -0.5); glflush(); void keyboard(unsigned char key, int x, int y) /* 변경없음 */ int main(int argc, char** argv) /* 변경없음 */

OpenGL Geometry 가상의공간을구성하는각물체를표현하는데있어가장기본이되는요소 실시간그래픽스에서는주로가장단순한형태의표현방법인 linear primitives 를사용 Point, vertex Line segments Polygon Polyhedron OpenGL Geometry 기하학적객체를정의하기위해서는 : glbegin( ); glvertex*(...); void glbegin(glenum mode) void glend(void) 도형을그리려면, glbegin() 과 glend() 사이에그도형의각정점 (vertex) 의좌표치를설정하는함수를둠. mode에 GL_POINTS, GL_LINES, GL_POLYGON 등도형의타입을지정. void glvertex*() 이함수는 2 차원의좌표치를설정하는사용. 인수의형태는 Gldouble 임. Float 형태는 glvertex2f(..) 를 int 형태는 glvertex2i(..) 를사용함. OpenGL Geometry glvertex3fv( v ) OpenGL Geometry Primitives GL_POINTS GL_LINES GL_LINE_STRIP GL_LINE_LOOP GL_TRIANGLES GL_TRIANGLE_STRIP GL_TRIANGLE_FAN Number of components 2 - (x,y) 3 - (x,y,z) 4 - (x,y,z,w) Data Type b - byte ub - unsigned byte s - short us - unsigned short i - int ui - unsigned int f - float d - double Vector omit v for scalar form glvertex2f( x, y ) GL_QUADS GL_QUAD_STRIP GL_POLYGON

OpenGL Point Function glbegin(gl_points); glvertex2i (50, 100); glvertex2i (75, 150); glvertex2i (100, 200); ------------------------------------------------------------------------------------------------------ GLint pt1[2] = 50, 100; GLint pt2[2] = 75, 150; GLint pt3[2] = 100, 200; glbegin(gl_points); glvertex2iv(pt1); glvertex2iv(pt2); glvertex2iv(pt3); OpenGL Point Function glbegin(gl_points); glvertex3f(-78.05, 909.72, 14.60); glvertex3f(261.91, -5200.67, 188.33); ---------------------------------------------------------------------------------------------------- class wcpt2d public: GLfloat x, y; ; wcpt2d pointpos; pointpos.x = 120.75; pointpos.y = 45.30; glbegin(gl_points); glvertex2f(pointpos.x, pointpos.y); OpenGL Line Function OpenGL Filling Polygon glbegin(gl_lines); glbegin(gl_line_strip); glbegin(gl_line_loop); glbegin(gl_polygons); glvertex2iv(p6); glbegin(gl_triangles); glvertex2iv(p6); p3 p3 p3 p1 p5 p1 p5 p1 p2 p4 p2 p4 p2 p4

OpenGL Filling Polygon OpenGL Filling Polygon glbegin(gl_triangle_strip); glvertex2iv(p6); glbegin(gl_triangle_fan); glvertex2iv(p6); glbegin(gl_quads); glvertex2iv(p6); glvertex2iv(p7); glvertex2iv(p8); glbegin(gl_quad_strip); glvertex2iv(p6); glvertex2iv(p8); glvertex2iv(p7); OpenGL Attributes 각기하학적기본요소 (geometry primitive) 는속성을갖고있다. 속성은기본요소가화면상에나타날수있는방법을제어한다. Color Line thickness Line styles Polygon patterns 선의두께나스타일 다각형표시방법 OpenGL Attributes Vertex 점의크기 - glpointsize(glfloat size) Line 선분의폭 gllinewidth(glfloat width) 점선의스타일 gllinestipple(glint factor, GLushort pattern) Polygon 외형과사용면지정 glpolygonmode(glenum face, GLenum mode) Face: GL_FRONT_AND_BACK, GL_FRONT, GL_BACK Mode: GL_POINT, GL_LINE, GL_FILL 앞면지정 glfrontface(glenum mode) Mode: GL_CCW, GL_CW 스티플링 glpolygonstipple(const GLubyte *mask) Mast: 32x32 비트윈도우정렬스티플패턴

OpenGL Attributes OpenGL Color Model RGB (Red Green Blue) or RGBA(Red Green Blue Alpha) RGB 색이따로분리돼서 framebuffer 에저장되어있음. glcolor3f(1.0, 0.0, 0.0); // 색값은 0.0 ~ 1.0 glcolor3ub(255, 0.0, 0.0); // 색값은 0~255 OpenGL Attributes OpenGL Color Model Color Index는메모리를적게사용함. 현재는크게쓰이지않음. glindexi(element);