chapter2.hwp

Similar documents
PowerPoint 프레젠테이션

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

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

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

Open GL

Microsoft PowerPoint - lecture2-opengl.ppt

<4D F736F F F696E74202D204347C3E2BCAEBCF6BEF D315FC4C4C7BBC5CDB1D7B7A1C7C8BDBA20B0B3B0FC2E >

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

Microsoft PowerPoint - lecture4-ch2.ppt

Microsoft PowerPoint - lecture3-ch2.ppt

슬라이드 1

Microsoft PowerPoint - 13prac.pptx

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

Microsoft PowerPoint - chap01-C언어개요.pptx

Microsoft Word - cg07-midterm.doc

04_오픈지엘API.key

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

윈도우시스템프로그래밍

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

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

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

BMP 파일 처리

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

<4D F736F F D D31312D30312D53572D30312DBBE7BFEBC0DABCB3B8EDBCAD5FBFDCBACEB9E8C6F7BFEB2E646F63>

Microsoft PowerPoint - 06-Body Data Class.pptx

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

vRealize Automation용 VMware Remote Console - VMware

Microsoft Word - 3부A windows 환경 IVF + visual studio.doc

윈도우시스템프로그래밍

Windows 8에서 BioStar 1 설치하기

쉽게 풀어쓴 C 프로그래밍

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

Chapter #01 Subject

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

Microsoft Word - cg09-midterm.doc

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>

Microsoft PowerPoint - 07-Data Manipulation.pptx

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

K&R2 Reference Manual 번역본

; 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 - [2009] 02.pptx

Dialog Box 실행파일을 Web에 포함시키는 방법

Chapter_02-3_NativeApp

Microsoft PowerPoint - Install Guide[ ].ppt [호환 모드]

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

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

<C6F7C6AEB6F5B1B3C0E72E687770>

NTD36HD Manual

LCD Display

PowerPoint 프레젠테이션

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

PowerPoint 프레젠테이션

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

歯Lecture2.PDF

슬라이드 1

(Microsoft PowerPoint - \270\266\300\314\305\251\267\316\304\250USB_Host_Device_\272\316\306\256\267\316\264\365\275\307\275\300_Philip.ppt)

Studuino소프트웨어 설치

교재

강의10

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

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

제8장 자바 GUI 프로그래밍 II

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어

슬라이드 1

<4D F736F F F696E74202D204347C3E2BCAEBCF6BEF D325FC4C4C7BBC5CDB1D7B7A1C7C8BDBA20B1E2BABBBFE4BCD22E >

슬라이드 1

슬라이드 1

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

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

기존에 Windchill Program 이 설치된 Home Directory 를 선택해준다. 프로그램설치후설치내역을확인해보면 Adobe Acrobat 6.0 Support 내역을확인할수 있다.

이장에서다룰내용 테두리를제어하는스타일시트 외부여백 (Margin) 과내부여백 (Padding) 관련속성 위치관련속성 2

Week3

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

PowerPoint 프레젠테이션

Microsoft PowerPoint - e pptx

View Licenses and Services (customer)

윤성우의 열혈 TCP/IP 소켓 프로그래밍

슬라이드 1

Microsoft Word - Armjtag_문서1.doc

K_R9000PRO_101.pdf

Network Security - Wired Sniffing 실습 ICNS Lab. Kyung Hee University

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

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

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

Microsoft PowerPoint - 11주차_Android_GoogleMap.ppt [호환 모드]

MPLAB C18 C

MaxstAR SDK 2.0 for Unity3D Manual Ver

설계란 무엇인가?

PowerPoint 프레젠테이션

슬라이드 1

A SQL Server 2012 설치 A.1 소개 Relational DataBase Management System SQL Server 2012는마이크로소프트사에서제공하는 RDBMS 다. 마이크로소프트사는스탠다드 standard 버전이상의상업용에디션과익스프레스 exp

RVC Robot Vaccum Cleaner

이 장에서 사용되는 MATLAB 명령어들은 비교적 복잡하므로 MATLAB 창에서 명령어를 직접 입력하지 않고 확장자가 m 인 text 파일을 작성하여 실행을 한다

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

KNK_C_05_Pointers_Arrays_structures_summary_v02

C++ Programming

<4D F736F F F696E74202D C61645FB3EDB8AEC7D5BCBA20B9D720C5F8BBE7BFEBB9FD2E BC8A3C8AF20B8F0B5E55D>

슬라이드 1

Microsoft Word - cg09-final-answer.doc

Transcription:

2. 그래픽스프로그래밍의소개 2.1 OpenGL 이란? 2.1.1 OpenGL 의정의 2차원또는 3차원드로잉을위한표준그래픽스라이브러리 - 그래픽스하드웨어에대한소프트웨어인터페이스 - C나 C++ 과같은프로그래밍언어는아님 - 그래픽스하드웨어에잘구현될수있음 -C언어기반라이브러리 - 상태기반아키텍쳐 - 즉시모드 (Immediate mode) 기반 그래픽스라이브러리 = 수백개의함수들 - Primitive functions : 무엇을그릴것인가? = 점, 삼각형, 사각형, 도형모양 - Attribute functions : 어떻게그릴것인가? = 색상, 패턴모양, 선분의두께, 점의크기등 -Viewingfunctions: 카메라를어떻게다룰것인가? = 카메라의위치, 방향 - Transformation functions : 변환을어떻게처리할것인가? = 위치변환, 크기변환, 회전변환, 투영변환 - Input functions : 입력을어떻게받아들일것인가? = 마우스의좌( 우) 측버튼, 드래깅여부, 키보드, 조이스틱 - Control functions : 윈도우를어떻게관리할것인가? = 윈도우의크기, 위치, 이벤트처리방법 2.1.2 OpenGL 라이브러리종류 GL (Graphics Library): 저수준렌더링루틴으로구성된기본그래픽스라이브러리 - 표기법 : gl---- 로시작, 예) glcolor(1.0, 0.0, 0.0); GLU (OpenGL Utility Library) : 고수준함수들을제공하는 OpenGL의보완물 -2D 이미지확대/ 축소 - 구, 원통, 원반등을포함한 3D 객체들의렌더링 - 하나의이미지로자동적으로여러단계의 mipmap 이미지생성 - NURBS를통한곡면지원 - 오목다각형의테셀레이션지원 - 특수용도의변환과행렬 - 표기법 : glu---- 로시작, 예) glusolidsphere(1.0); GLUT(OpenGL Utility Toolkit) : - 윈도우설정 - 윈도우처리 주요플랫폼에서사용할수있는보조라이브러리

- 이벤트처리 - 표기법 : glut--- 로시작, 예) glutmainloop(); 2.2 OpenGL 2.2.1 자료형 기본구조 OpenGL 자료형 내부표현방식 C언어자료형 C 언어접미사 GLbyte 8-bit integer signed char b GLshort 16-bit integer short s GLint, GLsizei 32-bit integer long i GLfloat, GLclampf 32-bit floating point float f GLdouble, GLclampd 64-bit floating point double d GLubyte, GLboolean 8-bit unsigned integer unsigned char ub GLushort 16-bit unsigned integer unsigned short us GLuint, GLenum, GLbitfield 32-bit unsigned integer unsigned long ui 2.2.2 함수명령규칙 OpenGL 함수들은모두일정한규칙을가지고있다. 그래서그함수가어느라이브러리속하는지, 몇개의인자를받고각인자의타입이무엇인지, 어떤역할을하는지에관한내용을함수이름에서알수있도록한다. 각함수이름은다음의네부분으로구성된다. 라이브러리종류를나타내는접두사 command를나타내는어근 인자의개수 ( 선택) 인자의타입 ( 선택) 예 ) glcolor3f(1.0, 0.0, 0.0) gl : GL 라이브러리함수임을의미 Color : 색상에관련된함수임을의미 ( 첫글자는대문자로시작한다.) 3 : 3 개의인자를받겠다는의미 (red, green, blue) f: 받아지는인자들은 float형식의자료들임을의미 2.2.3 OpenGL 프로그램예제를통한이해 #include <windows.h> #include <gl/glut.h> // (or others, depending on the system in use) void init (void) { glclearcolor (1.0, 1.0, 1.0, 0.0) ; // Set display-window color to white. glmatrixmode (GL_PROJECTION); // Set projection parameters. gluortho2d (0.0, 200.0, 0.0, 150.0); } void RenderScene (void) {

} glclear (GL_COLOR_BUFFER_BIT); // Clear display window. glcolor3f(1.0, 0.0, 0.0); // Set line segment color to red. glbegin (GL_LINES); glvertex2i (180, 15); // Specify line-segment geometry. glvertex2i (10, 145); glend(); glflush (); // Process all OpenGL routines as quickly as possible. void main (int argc, char** argv) { glutinit (&argc, argv); // Initialize GLUT. glutinitdisplaymode (GLUT_SINGLE GLUT_RGB); // Set display mode. glutinitwindowposition (50, 100); // Set top-left display-window position. glutinitwindowsize (400, 300); // Set display-window width and height. glutcreatewindow ("An Example OpenGL Program"); // Create display window. init(); // Execute initialization procedure. glutdisplayfunc (RenderScene); // Send graphics to display window. glutmainloop(); // Display everything and wait. } 헤드파일부분 #include <windows.h> #include <gl/glut.h> "windows.h" 라는헤드파일은모든응용 windows 애플리케이션에필요하며 WIN32 함수프로토타입의 대부분을포함하고있다. 그러나이헤더파일을꼭추가할필요는없다. 그이유는 WIN32 버전의 GLUT 라이브러리는 window.h를 glut.h 에포함하고있기때문이다. glut.h는 OpenGL과 GLU 라이브러리 함수를정의하는헤드파일도포함한다. 만약 GLUT를사용하지않는다면두개의파일 gl.h 와 glu.h 도추가하여야한다. main 부분 void main (int argc, char** argv) { glutinit (&argc, argv); // Initialize GLUT. glutinitdisplaymode (GLUT_SINGLE GLUT_RGB); // Set display mode. glutinitwindowposition (50, 100); // Set top-left display-window position. glutinitwindowsize (400, 300); // Set display-window width and height. glutcreatewindow ("An Example OpenGL Program"); // Create display window. init(); // Execute initialization procedure. glutdisplayfunc (linesegment); // Send graphics to display window. glutmainloop(); // Display everything and wait. } 콘솔모드의 C나 C++ 프로그램은항상 main 함수에서시작한다. Windows 프로그램인경우에는 WInMain 이그역할을담당한다고볼수있다. 일반적으로 main 함수는다음과같은네개의과정을

포함한다. 시스템초기화 - 시스템에맞는윈도우를스크린에띄우는작업 - OpenGL를윈도우에결합하는작업 OpenGL 초기화 - OpenGL 좌표계설정 - 초기치상태값설정 답신함수등록 - 이벤트가발생하면실행될내용을하나의함수로설정 - 이벤트와답신함수연결 사건대기및실행 - 사건이발생하기를기다렸다가발생하면 - 사건에등록된함수를연결하여실행 glutinit 함수는 GLUT를초기화하는함수이고사용하려는윈도우의위치와크기를제어하기위해서는 glutinitwindowposition 함수와 glutinitwindowsize 함수를사용한다. 여기에서사용되는좌표계는윈도우좌표계로서모니터의상단좌측이 (0,0) 이되며오른쪽으로갈수록 x 값이증가하며, 아래로내려올수록 y 값이증가한다. 그림을그릴때사용되는 OpenGL 좌표계는좌측하단이 (0,0) 으로여겨지는데, 오른쪽으로갈수록 x 값이증가하며, 위로갈수록 y 값이증가한다. 즉, 윈도우좌표계와 OpenGL 좌표계는 y 축이반대임을명심하도록하자. GLUT 라이브러리가윈도우를생성할때어떤종류의디스플레이모드를사용할것인지를지정하는함수가 glutinitdisplaymode 이다. 함수안의인자는플래그로서싱글버퍼를사용할지아니면더블버퍼를사용할지를정하는플래그 (GLUT_SINGLE or GLUT_DOUBLE), 사용되는색상모드가 RGB인지 RGBA 인지를결정하는플래그 (GLUT_RGB or GLUT_RGBA), 3차원장면을표현할때보이지않는면을그리지않게할때사용되는깊이정보를저장하는 z- 버퍼를사용할지여부를알리는플래그 (GLUT_DEPTH) 들로구성된다. glutdisplayfunc(renderscene) 함수는이벤트가발생하였을때인자안에있는답신함수를실행하게하 는역할을하는함수의일종이다. 이함수는윈도우가처음화면에나타날때, 윈도우의크기를보벙 할때, 윈도우가다름윈도우에의해서가려졌다가다시나타날때 Display 이벤트를발생하여이함 수의인자인 RenderScene 이라는함수를실행하게된다. 이예제에서는빨간색의선분을그리게되는 셈이다. 이런 종류의 함수들은 이벤트를 발생할 수 있는 입력장치와 연관되는 경우도 있다. glutdisplayfunc, glutkeyboardfunc, glutmousefunc 그리고 glutreshapefunc, glutpostredisplay 등이추가로 알아두어야할중요한함수들이다. glutmainloop() 함수는그래픽스프로그램과일반프로그램과의차이를명확하게보여주는함수이다. 일반프로그램은내부프로그램을실행하고결과를얻은다음에는자동적으로종료하지만그래픽스프로그램은계속해서결과를보여주고사용자가직접종료명령을내리기전까지는종료되어서는안된다. 왜냐하면사용자의입력을계속받을준비가되어야하기때문이다. 이를가능하게하는것이이함수이다. 이함수는 GLUT 이벤트핸들링루프를시작한다. 이벤트루프에서모든키보드, 마우스, 다시그리기등과여러가지윈도우메시지를처리하게된다. 이함수는프로그램을종료할때까지는리턴하지않는다.

RenderScene 부분 void RenderScene (void) { glclear (GL_COLOR_BUFFER_BIT); // Clear display window. glcolor3f(1.0, 0.0, 0.0); // Set line segment color to red. glbegin (GL_LINES); glvertex2i (180, 15); // Specify line-segment geometry. glvertex2i (10, 145); glend(); glflush (); // Process all OpenGL routines as quickly as possible. } 이부분에서는프로그래머가그리고자하는물체들을만들어서그리는영역이다. main 부분에서는그리고자하는목적을위해전체적인환경을구성하는역할을한다면이부분은그래픽스프로그램의꽃인 scene 을형성하는곳으로나타내고자하는모든물체를자유롭게다루는곳이다. 그러므로 OpenGL 의대부분의함수들이이곳에서적용되는셈이다. 위예제를간단히설명하면, 현재그려져있는그림이저장되어있는 Color buffer를지우는작업을하는 glclear 함수를먼저실행하고빨간색을가지고 (180.15) 에서출발하여 (10.145) 에끝나는선분을그리는함수를수행하게되어있다. 그래픽스프로그램은내부적으로여러개의명령들을순차적으로처리하는렌더링파이프라인을사용한다. OpenGl 명령들은큐에저장되어있다가 OpenGL 드라이버가요청된여러개의작업을한꺼번에처리하게된다. 이러한구조를사용하면성능이향상되며복잡한물체를그릴때에는두드러진효과를얻을수있다. 그리는작업이가속되는원리는일정한드로잉명령들을한꺼번에하드웨어에액세스하기때문이다. glflush 함수는 OpenGL에게더이상드로잉명령들을받아들이지말고지금까지요청된명령들을처리하게하는임무를수행한다. 초기화부분 void init (void) { glclearcolor (1.0, 1.0, 1.0, 0.0) ; // Set display-window color to white. glmatrixmode (GL_PROJECTION); // Set projection parameters. gluortho2d (0.0, 200.0, 0.0, 150.0); } 이부분에서는 OpenGL 의상태들을초기화한다. window 의바탕색을어떤색으로할지, 카메라의위치, 카메라방향, 3차원물체를 2 차원화면으로투영하는방법, 관심영역을의미하는관측공간의정의, 마지막으로카메라로찍은사진을현상하고자할때현상되는영역을의미하는 Viewport의위치및크기를정하는과정을이곳에서처리한다.

2.3 OpenGL 설치 2.3.1 OpenGL Setup 과정 1 Microsoft visual studio 6.0 이상버전을설치한다. 이미설치되어있다면 C:\..\Microsoft Visual studio\vc98\include\gl 폴더에 gl.h, glaux.h, glu.h 파일들이있는지확인한다. 2 glut 라이브러리를 http://www.opengl.org/resources/libraries/glut/glut_downloads.html 에서 glut 라이브러리를다운로드한다. 3 Microsoft visual studio를실행하고다운로드한 GLUT-3.7폴더의경로를지정해준다. 2.3.2 GLUT 라이브로리다운로드과정 1 http://www.opengl.org/resources/libraries/glut/glut_downloads.html 를방문하여 Contents목록에나와있는 GLUT for Microsoft Windows 95 & NT users를클릭하고다음그림과같이3개의링크된 zip파일들을다운로드한다. glut37.zip, glut37data.zip, glutdlls37beta.zip 2 glut37.zip, glut37data.zip 압축해제하고 glut-3.7폴더를생성한다.( 예 D:\glut-3.7 경로로압축이풀렸다고가정 ) 3 glutdlls37beta.zip 압축해제하여다음을실행한다. *.lib D:\glut-3.7\lib\glut glut.h VC98\Include\GL glut.dll C:\WINNT\system32 glut32.dll C:\WINNT\system32

4 Microsoft visual studio 실행하고 GLUT-3.7폴더의경로를지정해야한다. 5 Microsoft visual studio의 메뉴바에서 Option 메뉴설정 Tools --> Options.. 를클릭 6 헤드파일경로설정 Option 탭메뉴에서 directories 선택 show directories for 에서 include files 선택 new버튼클릭 헤더파일의경로를찾기위해... 클릭

그림과같이헤더파일들이들어있는폴더를찾아클릭 7 라이브러리경로설정 Option 탭메뉴에서 directories 선택 Show directories for에서 Library files를선택,new 클릭 library 파일들의경로를찾기위해클릭

그림과같이 glut32.lib 가있는폴더를찾아클릭 ok 버튼클릭하면셋업과정완료 2.3.4 Visual C++ 에서의작업 1 예제프로그래밍 ( The display window and line segment 만들기 ) 예제프로그램을실행한결과 2 Project 만들기 [File] 메뉴의 new를클릭하여프로젝트생성마법사를실행 Project탭 win32 console Application을선택한다. Project name과프로젝트파일들이저장될폴더를지정한다.

An empty project 선택 Finish 클릭 3 새로운파일만들기 [File] 메뉴의 new를클릭 Files탭 C++ source File을선택한다. File name을지정한다. 4 프로그램작성하기 Text창에구현을한다.

5 예제코드

6 파일저장하기 7 컴파일하기 Ctrl + F7키를눌러컴파일 8 빌드하기 F7를눌러빌드

9 실행하기 Ctrl + F5를눌러실행