basic windows & opengl programming - korea...

35
Graphics Graphics Lab @ Korea University http://kucg.korea.ac.kr Basic Windows & OpenGL Programming 컴퓨터 그래픽스 연구실

Upload: others

Post on 23-Feb-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Basic Windows & OpenGL Programming - Korea Universitykucg.korea.ac.kr/new/course/2010_1/CNCE340/tutor/03Basic... · 2002-01-17 · KUCG Graphics Lab @ Korea University OpenGL 파일설정

Graphics

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

Basic Windows &

OpenGL Programming

컴퓨터 그래픽스 연구실

Page 3: Basic Windows & OpenGL Programming - Korea Universitykucg.korea.ac.kr/new/course/2010_1/CNCE340/tutor/03Basic... · 2002-01-17 · KUCG Graphics Lab @ Korea University OpenGL 파일설정

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

Page 4: Basic Windows & OpenGL Programming - Korea Universitykucg.korea.ac.kr/new/course/2010_1/CNCE340/tutor/03Basic... · 2002-01-17 · KUCG Graphics Lab @ Korea University OpenGL 파일설정

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

Page 5: Basic Windows & OpenGL Programming - Korea Universitykucg.korea.ac.kr/new/course/2010_1/CNCE340/tutor/03Basic... · 2002-01-17 · KUCG Graphics Lab @ Korea University OpenGL 파일설정

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

Page 6: Basic Windows & OpenGL Programming - Korea Universitykucg.korea.ac.kr/new/course/2010_1/CNCE340/tutor/03Basic... · 2002-01-17 · KUCG Graphics Lab @ Korea University OpenGL 파일설정

KUCG

Graphics Lab @ Korea University

프로젝트 생성 [VS 6.0] (3/3)

[File][New] (Ctrl+N)

C++ Source File 선택

File 이름 정한 후 [OK]

완료

http://kucg.korea.ac.kr

Page 7: Basic Windows & OpenGL Programming - Korea Universitykucg.korea.ac.kr/new/course/2010_1/CNCE340/tutor/03Basic... · 2002-01-17 · KUCG Graphics Lab @ Korea University OpenGL 파일설정

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

Page 8: Basic Windows & OpenGL Programming - Korea Universitykucg.korea.ac.kr/new/course/2010_1/CNCE340/tutor/03Basic... · 2002-01-17 · KUCG Graphics Lab @ Korea University OpenGL 파일설정

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

Page 9: Basic Windows & OpenGL Programming - Korea Universitykucg.korea.ac.kr/new/course/2010_1/CNCE340/tutor/03Basic... · 2002-01-17 · KUCG Graphics Lab @ Korea University OpenGL 파일설정

KUCG

Graphics Lab @ Korea University

프로젝트 생성 [VS 8.0] (3/3)

소스 파일 선택 후 우 클릭새 항목 추가

코드C++파일(.cpp)이름 선택추가(A)

완료

http://kucg.korea.ac.kr

Page 10: Basic Windows & OpenGL Programming - Korea Universitykucg.korea.ac.kr/new/course/2010_1/CNCE340/tutor/03Basic... · 2002-01-17 · KUCG Graphics Lab @ Korea University OpenGL 파일설정

KUCG

Graphics Lab @ Korea University

Example

예제 및 실행결과

http://kucg.korea.ac.kr

Page 11: Basic Windows & OpenGL Programming - Korea Universitykucg.korea.ac.kr/new/course/2010_1/CNCE340/tutor/03Basic... · 2002-01-17 · KUCG Graphics Lab @ Korea University OpenGL 파일설정

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

Page 12: Basic Windows & OpenGL Programming - Korea Universitykucg.korea.ac.kr/new/course/2010_1/CNCE340/tutor/03Basic... · 2002-01-17 · KUCG Graphics Lab @ Korea University OpenGL 파일설정

KUCG

Graphics Lab @ Korea University

void gluLookAt

Viewing

http://kucg.korea.ac.kr

Page 13: Basic Windows & OpenGL Programming - Korea Universitykucg.korea.ac.kr/new/course/2010_1/CNCE340/tutor/03Basic... · 2002-01-17 · KUCG Graphics Lab @ Korea University OpenGL 파일설정

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

Page 14: Basic Windows & OpenGL Programming - Korea Universitykucg.korea.ac.kr/new/course/2010_1/CNCE340/tutor/03Basic... · 2002-01-17 · KUCG Graphics Lab @ Korea University OpenGL 파일설정

KUCG

Graphics Lab @ Korea University

void glFrustum

View Volume

http://kucg.korea.ac.kr

Page 15: Basic Windows & OpenGL Programming - Korea Universitykucg.korea.ac.kr/new/course/2010_1/CNCE340/tutor/03Basic... · 2002-01-17 · KUCG Graphics Lab @ Korea University OpenGL 파일설정

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

Page 16: Basic Windows & OpenGL Programming - Korea Universitykucg.korea.ac.kr/new/course/2010_1/CNCE340/tutor/03Basic... · 2002-01-17 · KUCG Graphics Lab @ Korea University OpenGL 파일설정

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

Page 17: Basic Windows & OpenGL Programming - Korea Universitykucg.korea.ac.kr/new/course/2010_1/CNCE340/tutor/03Basic... · 2002-01-17 · KUCG Graphics Lab @ Korea University OpenGL 파일설정

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

Page 18: Basic Windows & OpenGL Programming - Korea Universitykucg.korea.ac.kr/new/course/2010_1/CNCE340/tutor/03Basic... · 2002-01-17 · KUCG Graphics Lab @ Korea University OpenGL 파일설정

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

Page 19: Basic Windows & OpenGL Programming - Korea Universitykucg.korea.ac.kr/new/course/2010_1/CNCE340/tutor/03Basic... · 2002-01-17 · KUCG Graphics Lab @ Korea University OpenGL 파일설정

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

Page 20: Basic Windows & OpenGL Programming - Korea Universitykucg.korea.ac.kr/new/course/2010_1/CNCE340/tutor/03Basic... · 2002-01-17 · KUCG Graphics Lab @ Korea University OpenGL 파일설정

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

Page 21: Basic Windows & OpenGL Programming - Korea Universitykucg.korea.ac.kr/new/course/2010_1/CNCE340/tutor/03Basic... · 2002-01-17 · KUCG Graphics Lab @ Korea University OpenGL 파일설정

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

Page 22: Basic Windows & OpenGL Programming - Korea Universitykucg.korea.ac.kr/new/course/2010_1/CNCE340/tutor/03Basic... · 2002-01-17 · KUCG Graphics Lab @ Korea University OpenGL 파일설정

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

Page 23: Basic Windows & OpenGL Programming - Korea Universitykucg.korea.ac.kr/new/course/2010_1/CNCE340/tutor/03Basic... · 2002-01-17 · KUCG Graphics Lab @ Korea University OpenGL 파일설정

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

Page 24: Basic Windows & OpenGL Programming - Korea Universitykucg.korea.ac.kr/new/course/2010_1/CNCE340/tutor/03Basic... · 2002-01-17 · KUCG Graphics Lab @ Korea University OpenGL 파일설정

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

Page 25: Basic Windows & OpenGL Programming - Korea Universitykucg.korea.ac.kr/new/course/2010_1/CNCE340/tutor/03Basic... · 2002-01-17 · KUCG Graphics Lab @ Korea University OpenGL 파일설정

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

Page 26: Basic Windows & OpenGL Programming - Korea Universitykucg.korea.ac.kr/new/course/2010_1/CNCE340/tutor/03Basic... · 2002-01-17 · KUCG Graphics Lab @ Korea University OpenGL 파일설정

KUCG

Graphics Lab @ Korea University

그래픽 함수 관련 (속성 설정)

glPointSize(GLfloat size)

점의 크기

glLineWidth(GLfloat width)

선의 두께

glGetFloatv(GL_LINE_SIZE_RANGE)

드라이버가 지원하는 최대 선의 두께를 반환

http://kucg.korea.ac.kr

Page 27: Basic Windows & OpenGL Programming - Korea Universitykucg.korea.ac.kr/new/course/2010_1/CNCE340/tutor/03Basic... · 2002-01-17 · KUCG Graphics Lab @ Korea University OpenGL 파일설정

KUCG

Graphics Lab @ Korea University

그래픽 함수 관련 (속성 설정)

glShadeModel(mode)

다각형 내부 채움 모드 설정

mode

GL_FLAT : 다각형의 내부를 모두 동일한 색으로

GL_SMOOTH : 정점의 색을 Weighted Average 보간

Gradation

기본값

http://kucg.korea.ac.kr

Page 28: Basic Windows & OpenGL Programming - Korea Universitykucg.korea.ac.kr/new/course/2010_1/CNCE340/tutor/03Basic... · 2002-01-17 · KUCG Graphics Lab @ Korea University OpenGL 파일설정

KUCG

Graphics Lab @ Korea University

Example

http://kucg.korea.ac.kr

Page 29: Basic Windows & OpenGL Programming - Korea Universitykucg.korea.ac.kr/new/course/2010_1/CNCE340/tutor/03Basic... · 2002-01-17 · KUCG Graphics Lab @ Korea University OpenGL 파일설정

KUCG

Graphics Lab @ Korea University

Example

http://kucg.korea.ac.kr

Page 30: Basic Windows & OpenGL Programming - Korea Universitykucg.korea.ac.kr/new/course/2010_1/CNCE340/tutor/03Basic... · 2002-01-17 · KUCG Graphics Lab @ Korea University OpenGL 파일설정

KUCG

Graphics Lab @ Korea University

Example

http://kucg.korea.ac.kr

Page 31: Basic Windows & OpenGL Programming - Korea Universitykucg.korea.ac.kr/new/course/2010_1/CNCE340/tutor/03Basic... · 2002-01-17 · KUCG Graphics Lab @ Korea University OpenGL 파일설정

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

Page 32: Basic Windows & OpenGL Programming - Korea Universitykucg.korea.ac.kr/new/course/2010_1/CNCE340/tutor/03Basic... · 2002-01-17 · KUCG Graphics Lab @ Korea University OpenGL 파일설정

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

Page 33: Basic Windows & OpenGL Programming - Korea Universitykucg.korea.ac.kr/new/course/2010_1/CNCE340/tutor/03Basic... · 2002-01-17 · KUCG Graphics Lab @ Korea University OpenGL 파일설정

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);

Page 34: Basic Windows & OpenGL Programming - Korea Universitykucg.korea.ac.kr/new/course/2010_1/CNCE340/tutor/03Basic... · 2002-01-17 · KUCG Graphics Lab @ Korea University OpenGL 파일설정

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)

Page 35: Basic Windows & OpenGL Programming - Korea Universitykucg.korea.ac.kr/new/course/2010_1/CNCE340/tutor/03Basic... · 2002-01-17 · KUCG Graphics Lab @ Korea University OpenGL 파일설정

KUCG

Graphics Lab @ Korea University

Example

http://kucg.korea.ac.kr