420 likes | 682 Views
Lecture #3. 제 1 장. 컴퓨터 그래픽스 시스템과 모델 - 3 D 컴퓨터 그래픽스 구조 - OpenGL API 개요. 강의 개요. 3 D 컴퓨터 그래픽스 시스템 인터페이스 3 D 컴퓨터 그래픽스 시스템 구조 OpenGL API 함수 소개 2차원 그래픽 프로그램 작성 3차원 그래픽스의 특수한 경우로 취급 가능 2차원 그래픽 프로그램 예 #1 : 간단한 사각형 도형 그리기 2차원 그래픽 프로그램 예 #2 : 사각형 도형 애니메이션. 프로그래머 인터페이스.
E N D
Lecture #3 제 1 장. 컴퓨터 그래픽스 시스템과 모델 - 3D 컴퓨터 그래픽스 구조 - OpenGL API 개요
강의 개요 • 3D 컴퓨터 그래픽스 시스템 인터페이스 • 3D 컴퓨터 그래픽스 시스템 구조 • OpenGL API 함수 소개 • 2차원 그래픽 프로그램 작성 • 3차원 그래픽스의 특수한 경우로 취급 가능 • 2차원 그래픽 프로그램 예 #1 : • 간단한 사각형 도형 그리기 • 2차원 그래픽 프로그램 예 #2 : • 사각형 도형 애니메이션
프로그래머 인터페이스 • 그래픽스 시스템과의 상호 작용 • 기존의 프로그램을 이용한 인터페이스 : GUI 인터페이스 페인팅 프로그램의 인터페이스
응용 프로그래머 인터페이스(API) • 그래픽 시스템과의 상호 작용 • API를 통한 인터페이스 그래픽 시스템에 대한 응용 프로그래머의 모델
응용 프로그래머 인터페이스(API) • 프로그래머가 하드웨어에 대한 구체적인 내용을 알 필요가 없도록 해준다 • 합성 카메라 모형이 OpenGL, PHIGS, GKS-3D 등의 API 들의 기반이 된다 • 객체, 관측자, 광원, 표면 재질들에 대한 지정 함수가 필요
CORE GKS GKS-3D PHIGS PHIGS+ 그래픽스 표준
De facto (industry) 표준들 • QuickDraw (Apple) • Xlib (X-window) • GL (SGI), OpenGL • DirectDraw, Direct3D (MS) • Renderman (Pixar) • Java3D
API의 함수들 • 3D 그래픽스 시스템은 일반적으로 합성 카메라 모형에 기반하고 있어 다음과 같은 API 함수를 지원한다 • 객체 • 보통 정점들의 집합과 객체 타입(정점들 사이의 관계)로 정의 • 관측자 • 카메라의 위치지정 : 위치, 방향, 초점거리, 필름면 • 광원 • 위치, 세기, 색, 방향성을 지정 • 재질의 특성 • 반사 성질, 투과 성질, 확산 성질 등
객 체 • API에서 제공하는 기본 객체 • 점, 선분, 사각형, 다각형, 텍스트 등 • API에 따라 곡선, 면을 지원하기도 한다 • OpenGL의 삼각형 정의 glBegin(GL_POLYGON); glVertex3f(0.0, 0.0, 0.0); glVertex3f(0.0, 1.0, 0.0); glVertex3f(0.0, 0.0, 1.0); glEnd();
관측자 정의 • 기본적으로 필요한 명세 • 위치 • 투영 중심의 위치로 기술 • 방향 • 투영 중심을 원점으로 하는 좌표계에서의 회전 • 초점 거리 • 카메라가 보는 세계의 부분 정의 • 필름 면 • 필름면의 높이와 넓이 • 다양한 방식으로 정의 가능
고전적 관측대 합성 카메라 관측 • 고전적 관측 • 객체와 관찰자와의 관계를 강조 : pp. 35 그림 참조 • 합성 카메라 관측 • 객체와 관찰자의 독립성 강조 입방체의 이점 투시
OpenGL의 관측자 명세 • glOrtho(….) • gluLookAt(cop_x,cop_y,cop_z, at_x, at_y, at_z, ...); • gluPerspective(field_of_view, …);
광원 & 재질 특성 • 광원 • 위치, 세기, 색 및 방향성 등을 지정 • 단순화를 목적으로 일점 광원(pointer light)와 단색 광원 (monochrome light)을 가정 • 재질 특성 • 객체의 성질(속성)을 지정 • 반사 성질, 투과 성질, 확산 성질 등 • 광원과 재질 특성은 API가 지원하는 광-재질 상호작용의 모형에 의존적
일련의 이미지들 • 색 그림판 : pp 219 그림 참조 • OpenGL을 이용하여 동일한 객체에 차츰 복잡한 랜더링을 적용 • 3D 그래픽스와 관련하여 다루게 될 주제를 순서대로 개략적으로 제시 • 1 : 선 구조 이미지 (wire frame image) • 3 : 평면 다각형 (은면 제거 알고리즘이 수행됨) • 4 : 광원 사용, 단순 음영법(flat shading) 사용 • 5 : 세련된 음영법 사용(smooth shading) • 6 : 무늬 사상(texture mapping) 사용 • 7 : 프랙탈(fractals) • 8 : 안개 효과 사용
선구조 이미지 평면 다각형 (2차원으로 보임)
세련된 음영법 사용 광원, 단순 음영법 사용
프랙탈 무늬 사상
3D 이미지 형성 패러다임 • 합성 카메라 모형 • 광원 추적(Ray-tracing) 모형 • 모델링-렌더링 모형
모델링-렌더링 패러다임 • 모델링-렌더링 패러다임 • 모델링과 렌더링을 분리할 수 있다 • 모델링 : 고도로 대화적, 상세한 이미지 작업 불필요 • 그래픽 워크스테이션에서 실행 • 렌더링 : 방대한 계산필요, 계산 전용기계에서 실행 중간파일 모델기 렌더기 The modeling-rendering pipeline
그래픽 시스템 구조 • 초기 그래픽 시스템 • Von Neumann 구조의 범용 컴퓨터 사용 • 벡터 디스플레이에 기반 • 주컴퓨터 : 선분의 양 끝점 계산 초기 그래픽스 시스템
디스플레이 처리기 • 디스플레이 처리기 • 주사 변환 담당 • 그래픽 기본 요소를 표시하는 기능 수행 • 주컴퓨터는 이미지를 생성하는 명령을 구성하여 디스플레이 처리기에 전달 Display-processor 구조
파이프라인 구조 • 산술 연산의 파이프라인 • 이미지 생성 과정이 파이프라인 구조에 적합 • 많은 정점을 비슷한 방식으로 처리
정점집합 변환 절단 투영 래스터화 화소집합 기하 파이프라인(Geometry Pipeline) Geometric pipeline
변 환(Transformation) • 서로 다른 좌표계 사이의 변환이 필요 • 객체의 좌표계 => 카메라의 좌표계 => 스크린 좌표계 • 행렬로 표현 • 일련의 변환은 행렬의 곱셈으로 처리
절 단(Clipping) • 모든 이미지 형성 시스템은 전체 세계를 한번에 볼 수 없다 • 사람 : 화각이 90도 정도 • 카메라 : 적절한 렌즈를 선택하여 화각을 조절 • 합성 카메라 모형 : 절단 사각형(Clipping Retangle) • 정점들을 이용하여 절단 연산이 가능하므로 변환연산과 함께 파이프라인에 포함시킬 수 있다 • 절단 기능을 일련의 파이프라인 절단기로 분할 가능
투 영(Projection) • 3차원 객체 2차원 객체로 투영 • 투영 행렬을 정점에 곱함으로써 수행 • 가능한 나중에 투영을 수행 • 보다 정확한 이미지를 얻을 수 있도록
래스터화(Rasterization) • 투영된 객체들을 프레임 버퍼 내의 화소들로서 표현 • 래스터화 과정은 7장에서 제시
성능에 관한 점들 • 두 가지 종류의 처리 • 기하학적 처리 • 파이프라인 구조가 적합 • 후반부 처리(back-end processing) • 프레임 버퍼 내의 비트들을 직접 조작 • 비트 블록의 빠른 이동 필요 • 성능 • 파이프라인 내에서의 얼마나 빨리 기하학적 요소를 이동 • 프레임 버퍼내의 화소를 1초에 얼마나 많이 변경
함수 호출 출력 사용자 프로그램 그래픽스 시스템 입출력 장치 데이터 입력 OpenGL API (1) • 컴퓨터 그래픽스 시스템 • 응용 프로그래머에게는 블랙 박스로 간주 • 그래픽스 하드웨어와 하드웨어 드라이버로 구현되거나 • 하나의 소프트웨어 시스템으로 구현
OpenGL API (2) • OpenGL API • 그래픽스 하드웨어에 대한 소프트웨어 인터페이스 • SGI사가 자사의 GL API를 다른 하드웨어나 운영체제에 이식하기 쉽도록 개발된 개방형(open) API • 마이크로소프트사는 OpenGL API를 윈도우 환경에서 동작하도록 소프트웨어(library)로 구현하여 제공 • SGI사에서도 windows용 OpenGL Library 제공 • Mesa 3D Library • 300 여 개의 API 함수들로 구성 • 클라이언트-서버 모델(생성-표시) • 플랫폼에 독립적 • 하드웨어와 운영체제 시스템에 독립적
어플리케이션 프로그램 GDI OS 서비스 I/O 서비스 OpenGL Software Rasterizer 디스플레이/윈도우 시스템 OpenGL API (3) • OpenGL 구현 : 기본 구현(Generic Implementation) • 소프트웨어적인 구현
어플리케이션 프로그램 GDI OS 서비스 I/O 서비스 OpenGL 하드웨어 드라이버 디스플레이/윈도우 시스템 OpenGL API (4) • OpenGL 구현 : 하드웨어 구현(H/W Implementation)
GLU OpenGL 응용 프로그램 프레임 버퍼 GL GLUT Xlib, Xtk GLX OpenGL API (5) • OpenGL 라이브러리 구성 • GL : 기본 라이브러리 • GLU : GL 보다 상위 객체, 기능 지원 (U = utility) • GLUT : 윈도우 시스템과의 인터페이스 (UT = utility toolkit) X-윈도우 시스템 환경에서의 OpenGL 라이브러리 구성
OpenGL API (6) • 플랫폼 독립성 • 윈도우 관리, 파일 입출력, 사용자와의 상호작용 등 하드웨어나 운영체제에 종속적인 기능에 대한 API는 지원하지 않는다 • GLUT(OpenGL Utility Toolkit) • 윈도우 시스템과의 인터페이스 • 하드웨어나 운영체제와 관련된 기능을 지원하는 라이브러리 • 윈도우 생성 및 관리, 팝업 메뉴 지원, 조이스틱 지원 등 • 현재 SGI사가 GLUT version 3.7을 지원 (http://reality.sgi.com/opengl/glut3/glut3.html)
OpenGL API (7) • 자료형(Data Type) • 특정 플랫폼에서 작성된 OpenGL 코드를 다른 플랫폼으로 쉽게 이식하기 위해 OpenGL 고유의 자료형을 정의
OpenGL API (8) • 자료형(Data Type) • 포인터 및 배열은 C 언어에서 정의하는 것과 동일하다 • e.g: GLshort shorts[10]; GLdouble *doubles[10];
OpenGL API (9) • 함수 명명 규칙(Naming Convention) • OpenGL API 함수들은 일정한 규칙에 따라 이름이 주어진다 • <라이브러리를 나타내는 접두사> <command를 의미하는 어근><인자의 개수-옵션><인자의 타입-옵션> • 함수명을 통해 소속된 라이브러리 종류, 함수의 기능, 전달받는 인자의 개수 및 타입을 알 수 있다 • 예: glColor3f(0.5f, 0.5f, 0.5f); glRectf(100.0f, 150.0f, 150.0f, 100.0f); glCreateWindow(“Sample”); • OpenGL에서는 기본적으로 실수형 리터럴을 float형 (single-precision floating point type)로 정의한다 • Windows C/C++ 환경에서는 실수형 리터럴은 double형으로 사용한다
OpenGL API (10) • OpenGL API 함수의 그룹 • 기본 요소 함수 : 점, 선분, 다각형, 문자열 등 • 속성 함수 : 색, 선의 두께, 글자체 등 • 관측함수 : 합성 카메라 설정 • 변환 함수 : 회전, 이동, 크기 변환 등 객체 변환 • 입력 함수 : 키보드, 마우스 등의 입력 처리 • 제어 함수 : 윈도우 시스템과의 통신, 초기화, 에러 처리 등
2D CG 프로그램 #1 • 간단한 사각형 도형 그리기
2D CG 프로그램 #2 • 사각형 애니메이션 그리기