420 likes | 789 Views
OpenGL 시작하기. 차 례. OpenGL ? 특징 / 함수 그룹 / 기능 / 관련 라이브러리 데이터 타입 / 네이밍 규칙 Visual Studio 설정 예제 프로그램 및 설명 Simple Sample : 창 만들기 도형 만들기 : 사각형 그리기 예제 프로그램 및 실행화면 Spring Example Line Example. OpenGL ?. 그래픽 하드웨어를 위한 소프트웨어 인터페이스 점 , 선 , 면 등과 같은 3 차원 요소 비트맵 등의 2 차원 요소의 표현
E N D
차 례 • OpenGL ? • 특징 /함수 그룹 / 기능 / 관련 라이브러리 • 데이터 타입 / 네이밍 규칙 • Visual Studio 설정 • 예제 프로그램 및 설명 • Simple Sample : 창 만들기 • 도형 만들기 : 사각형 그리기 • 예제 프로그램 및 실행화면 • Spring Example • Line Example
OpenGL ? • 그래픽 하드웨어를 위한 소프트웨어 인터페이스 • 점, 선, 면 등과 같은 3차원 요소 • 비트맵 등의 2차원 요소의 표현 • RGBA 모델과 Indexed Color 모델에 의한 색상 지원 • 다양한 조명과 쉐이딩의 설정 • 텍스처 매핑 • Antialiasing, 안개효과, 블랜딩 등의 고급기능 • Hardware-independent interface • 3D 그래픽 응용프로그램을 만들기 위한 API
함수 호출 출력 사용자 프로그램 그래픽스 시스템 입출력 장치 데이터 입력 OpenGL의 특징 • 그래픽스 시스템 : 블랙 박스로 간주 • OpenGL API • 120 여 함수들 • 클라이언트-서버 모델(생성-표시) • 하드웨어와 윈도우 시스템에 독립적
OpenGL 함수 그룹 • 기본 요소 함수 : 점, 선분, 다각형, 문자열 등 • 속성 함수 : 색, 선의 두께, 글자체 등 • 관측함수 : 합성 카메라 설정 • 변환 함수 : 회전, 이동, 크기 변환 등 객체 변환 • 입력 함수 : 키보드, 마우스 등의 입력 처리 • 제어 함수 : 윈도우 시스템과의 통신, 초기화, 에러 처리 등
OpenGL 기능 • 텍스처 매핑(texture mapping) • 깊이 버퍼 사용(Z 버퍼링) • 이중 버퍼링(double buffering) • 명암 효과(lighting effects) • 한면의 명암이 다른 효과(smooth shading) • 길감속성(material properties)
OpenGL 관련 라이브러리 • OpenGL(GL) • OpenGL을 제어하는 기본적인 함수들 • OpenGL Utility Library(GLU) • GL 보다 상위 기능 지원 (U = Utility) • OpenGL Extension to the X Window(GLX)
OpenGL 관련 라이브러리 • OpenGL Utility Toolkit(GLUT) • 윈도우 시스템과의 인터페이스 (T = Toolkit) • Open Inventor • Object-oriented toolkit based on OpenGL • Interactive three-dimensional graphic library
함수 네이밍 규칙 <라이브러리 접두어><루트 명령어><선택적인 인자의 수><선택적인 인자의 타입> glColor3f(…) 인자의 수 Gl 라이브러리 인자의 타입 루트 명령
설정 (Visual Studio) • Visual c++에서는 OpenGL의 기본적인 library들이 default로 설치됨 • Dynamic Link Library 설치 • opengl32.dll, glu32.dll, glut32.dll • Window98,Window Me c:\Windows\System • Window2000 C:\WINNT\System32 • Window XP C:\Windows\System32
설정 (Visual Studio) (cont) • OpenGL Library 설치 • opengl32.lib, glu32.LIB, glut32.lib • C:\Program file\Microsoft Visual Studio\VC98\Lib • Open GL Header 설치 • gl.h, glu.h, glut.h, glaux.h • C:\Program file\Microsoft Visual Studio\ VC98\include\GL
설정 (Visual Studio) (cont) • OpenGL 공식 사이트 • http://www.opengl.org • Glut 다운로드 페이지 • http://www.opengl.org/resources/libraries/glut/glut_downloads.html
Simple Sample (cont) • 실행 결과
Simple Sample (cont) • glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB) • 사용할 출력모드를 GLUT 라이브러리에 알림 • GLUT_SING : 싱글 버퍼창 사용 • GLUT_RGB : RGB 생상모드 사용
Simple Sample (cont) • glutCreateWindow(“Simple”); • 창을 만드는 GLUT 라이브러리 호출 • 창의 제목표시줄에 타이틀 “Simple” 표시
Simple Sample (cont) • glutDisplayFunc(RenderScene); • 출력 콜백(callback)함수 설정 • 창이 그려져야 할 때 지정 함수 호출(처음 출력시, 창의 크기 변경시 등에 호출)
Simple Sample (cont) • 컨텍스트 설정과 프로그램 시작 • SetupRC() : OpenGL 초기화 • glutMainLoop(); • GLUT 프레임웍 실행 • 프로그램이 종료될 때까지 운영체제에 관련된 메시지, 키입력 등을 처리
Simple Sample (cont) • glClearColor(0.0f, 0.0f, 1.0f, 1.0f); • 창을 지우기 위한 색상 지정 • 프로토타입 :void glClearColor(GLclampf 적색, Glclampf 녹색, Glclampf 청색, Glclampf 알파값); • 값의 범위 : 0.0 ~ 1.0
Simple Sample (cont) • glClear(GL_COLOR_BUFFER_BIT); • 버퍼 내용 삭제 • 가장 최근에 창에 그려진 이미지를 지움 • glFlush(); • 실행되지 않은 OpenGL 명령 실행 • 명령 큐의 내용을 모두 실행
도형 그리기 (cont) • 실행 결과
도형 그리기 (cont) • glRectf(-25.0f, 25.0f, 25.0f, -25.0f); • glColor3f 명령을 통해 색상 설정 후 사용 • 프로토타입 : void glRectf(Glfloat x1, Glfloat y1, Glfloat x2, Glfloat y2)
도형 그리기 (cont) • glutReshapeFunc(ChangeSize); • 창의 크기가 변할 때마다 실행 • 창 크기가 변경될 때마다 좌표를 초기화
도형 그리기 (cont) • 뷰포트 설정 : glViewport(GLint x, GLint y, GLsizei 너비, Glsizei 높이) glviewport(0,0,250,250) glviewport(0,0,125,125) --- 125 --- ---------- 250 ---------- ---------- 250 ---------- --- 125 --- ---------- 250 ---------- ---------- 250 ---------- [ 창 크기 == 뷰포트 크기 ] [ 창 크기 > 뷰포트 크기 ]
도형 그리기 (cont) • 클리핑 영역 설정 • Void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far); • 직교 좌표계 사용 (glOrtho()) • left, right : x축의 최소, 최대값 • bottom, top : y축의 최소, 최대값 • near, far : z축의 최소, 최대값
도형 그리기 (cont) • 클리핑 영역을 조정하여 종횡비가 맞는 사각형 유지
도형 그리기 (cont) • glMatrixMode(GL_PROJECTION); • 투영을 위한 행렬 변환 • glOrtho() 이전에 호출 • glLoadIdentity(); • 좌표계 초기화 • glOrtho() 이전에 호출
Spring Example (cont) [ 초기 실행 화면 ] [ Up Key 눌렀을 때 ] [ Right Key 눌렀을 때 ]
Line Example • Spring 예제의 RenderScene() 부분 수정
Line Example (cont) [ 초기 실행 화면 ] [ Up Key 눌렀을 때 ] [ Right Key 눌렀을 때 ]