basic windows & opengl programming - korea...

Post on 23-Feb-2020

6 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Graphics

Graphics Lab @ Korea Universityhttp://kucg.korea.ac.kr

Basic Windows &

OpenGL Programming

컴퓨터 그래픽스 연구실

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

top related