Graphics Graphics Lab @ Korea University http://kucg.korea.ac.kr Basic Windows & OpenGL Programming 컴퓨터 그래픽스 연구실
Graphics
Graphics Lab @ Korea Universityhttp://kucg.korea.ac.kr
Basic Windows &
OpenGL Programming
컴퓨터 그래픽스 연구실
KUCG
Graphics Lab @ Korea Universityhttp://kucg.korea.ac.kr
OpenGL 관련 참고 사이트
OpenGL 공식 사이트
http://www.opengl.org/
Khronos Group
http://www.khronos.org/
Nehe Productions
http://nehe.gamedev.net/
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
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
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
KUCG
Graphics Lab @ Korea University
프로젝트 생성 [VS 6.0] (3/3)
[File][New] (Ctrl+N)
C++ Source File 선택
File 이름 정한 후 [OK]
완료
http://kucg.korea.ac.kr
KUCG
Graphics Lab @ Korea University
프로젝트 생성 [VS 8.0] (1/3)
[File][New][Project] (Ctrl+Shift+N)
Visual C++Win32Win32 Console App
이름 정한 후 [OK]
빈 프로젝트 선택
http://kucg.korea.ac.kr
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
KUCG
Graphics Lab @ Korea University
프로젝트 생성 [VS 8.0] (3/3)
소스 파일 선택 후 우 클릭새 항목 추가
코드C++파일(.cpp)이름 선택추가(A)
완료
http://kucg.korea.ac.kr
KUCG
Graphics Lab @ Korea University
Example
예제 및 실행결과
http://kucg.korea.ac.kr
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 Up-vector
Default
glutLookAt(0.0, 0.0, 0.0, 0.0, 0.0, -100.0, 0.0, 1.0, 0.0);
Viewing
http://kucg.korea.ac.kr
KUCG
Graphics Lab @ Korea University
void gluLookAt
Viewing
http://kucg.korea.ac.kr
KUCG
Graphics Lab @ Korea University
void glOrthoGLdouble left, GLdouble right, GLdouble bottom, GLdouble top
GLdouble zNear, GLdouble zFar
void glFrustumGLdouble left, GLdouble right, GLdouble bottom, GLdouble top
GLdouble 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 plane
far : far clipping plane
View Volume
http://kucg.korea.ac.kr
KUCG
Graphics Lab @ Korea University
void glFrustum
View Volume
http://kucg.korea.ac.kr
KUCG
Graphics Lab @ Korea University
OpenGL의 그래픽 기본 요소
점 GL_POINTS
선 GL_LINES
GL_LINE_STRIP
GL_LINE_LOOP
도형 GL_POLYGON
GL_TRIANGLES
GL_TRIANGLE_STRIP
GL_TRIANGLE_FAN
GL_QUAD_STRIP
http://kucg.korea.ac.kr
KUCG
Graphics Lab @ Korea University
OpenGL의 그래픽 기본 요소
점(GL_POINTS)
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
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
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
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
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
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
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
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
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
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
KUCG
Graphics Lab @ Korea University
그래픽 함수 관련 (속성 설정)
glPointSize(GLfloat size)
점의 크기
glLineWidth(GLfloat width)
선의 두께
glGetFloatv(GL_LINE_SIZE_RANGE)
드라이버가 지원하는 최대 선의 두께를 반환
http://kucg.korea.ac.kr
KUCG
Graphics Lab @ Korea University
그래픽 함수 관련 (속성 설정)
glShadeModel(mode)
다각형 내부 채움 모드 설정
mode
GL_FLAT : 다각형의 내부를 모두 동일한 색으로
GL_SMOOTH : 정점의 색을 Weighted Average 보간
Gradation
기본값
http://kucg.korea.ac.kr
KUCG
Graphics Lab @ Korea University
Example
http://kucg.korea.ac.kr
KUCG
Graphics Lab @ Korea University
Example
http://kucg.korea.ac.kr
KUCG
Graphics Lab @ Korea University
Example
http://kucg.korea.ac.kr
KUCG
Graphics Lab @ Korea University
직교 투영 함수
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);
http://kucg.korea.ac.kr
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
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);
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)
KUCG
Graphics Lab @ Korea University
Example
http://kucg.korea.ac.kr