Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

codingfarm

OpenGL 기초 본문

computer graphics/opengl

OpenGL 기초

scarecrow1992 2020. 3. 18. 22:56

배울 내용

$\circ$ 그래픽스 파이프 라인이 무엇인가? OpenGL과 무슨 관계인가?

$\circ$ OpenGL의 역사와 현재 상태

$\circ$ 이책에서 다룰 내용의 기본 개념

 

OpenGL은 애플리케이션이 그 하부에서 동작하는 장치의 그래픽스 서브시스템에 접근하고 제어하기 위해 사용하는 인터페이스(API)이다. 즉, OpenGL은 API이다.

 

서브시스템에 대한 표준화된 인터페이스(API)에서 오는 장점

-이식성을 증대하여 하이엔드 그래픽스 워크스테이션에서부터 일반 데스크톱 컴퓨터, 콘솔게임기, 모바일폰 등에 대한 이식성을 증대 시킬수 있고, 소프트웨어 개발자들의 생산성을 증대 시킬 수 있다.

 

OpenGL과 그래픽스 파이프 라인

$\circ$ OpenGL의 목표 : 애플리케이션과 하부의 그래픽스 서브시스템의 추상화 레이어를 제공하는것.

$\circ$ OpenGL은 너무 높지도 낮지도 않은 추상화 수준의 균형을 이루어야 한다.

-여러 제조사간의 그래픽카드의 차이, 프로세서 아키텍처, 설치된 OS 등은 추상화 되어서 감추어저야 하지만 기반 하드웨어에 대한 접근은 허용 되어야 한다.

 

$\circ$ GPU는 그래픽스 이외에 물리 시뮬레이션, AI, 오디오 프로세싱 등의 작업도 수행 가능하다.

$\circ$ GPU는 쉐이더라 불리는 작은 프로그램을 실행하는 쉐이더 코어(다수의 작은 프로그래밍 가능한 프로세서)로 이루어져있다.

-각 코어는 상대적으로 처리량이 낮고,쉐이더의 인스트럭션 하나를 여러 크록 사이클로 수행하며 보통 비순차적 명령 실행, 분기 예측, 슈퍼 스칼라 이슈등의 고급기술이 부족하다.

-하지만 수십에서 수천개에 이르는 코어를 통해어마어마한 양의 일을 수행 할 수 있다.

 

$\circ$ 그래픽스 시스템은 여러 스테이지(stage) 로 나뉜다. 각 스테이지는 쉐이더나 설정 가능한 프로세싱 블록인 고정함수로 구분된다.

 

둥근박스 : 고정함수 스테이지,   일반박스 : 프로그래밍 가능 스테이지

프로그래밍 가능 스테이지에서 개발자들이 제공하는 쉐이더를 수행한다.

일부 고정 함수 스테이지도 쉐이더로 표현되어 있을 수 있다.

GPU제작사가 드라이버 차원에서 또는 펌웨어나 다른 시스템 소프트웨어를 통해 제공할 수 있다.

 

프리미티브, 파이프라인, 픽셀

OpenGL이 추구하는 생산모델에서 데이터는 단방향으로 흐른다. 프로그램에서 호출한 명령이 파이프라인의 앞단에 들어오고 각 스테이지를 거쳐 최종 파이프라인에 도달한다. 쉐이더나 다른 고정 파이프라인 블록들이 파이프라인 내에서 버퍼나 텍스처 등으로부터 추가 데이터를 받아서 처리한다. 이러한 버퍼나 텍스처 등의 자료구조는 렌더링 시에 사용할 정보를 저장하는 용도다. 파이프라인의 특정 스테이지에서는 버퍼나 텍스처에 데이터를 저장하기도 하며, 이를 통해 애플리케이션이 데이터를 읽고나 저장할 수 있다.

 

프리미티브(primitive)

OpenGL 렌더링의 기본 단위이다.

많은타입의 프리미티브를 지원하지만 세가지 기본 렌더링 가능 타입은 점,선,삼각형이다.

화면에 렌더링되는 모든것은 점, 선, 삼각형의 조합이다.

애플리케이션은 복잡한 서피스를 많은 수의 삼각형으로 분할하고, OpenGL로 보내서 래스터라이저(rasterizer)라고 불리는 하드웨어 가속기를 사용하여 렌더링 한다.

레스터라이저 : 3차원으로 표현된 삼각형을 화면에 그려질 일련의 픽셀로 변환하는 전용 하드웨어.

삼각형은 항상 컨벡스(convex; 볼록) 하기에 폴리곤을 그리는 규칙을 만들기도 쉽고 구현하기도 쉽다.

컨케이브(concave; 오목)한 폴리곤은 둘 이상의 삼각형으로 분할할 수 있기 때문에 하드웨어는 삼각형 렌더링을 직접 지원하며, 다른 서브 시스템들을 통해 복잡한 지오메트리를 삼각형으로 분할할 수 있다.

 

점, 선, 삼각형은 각각 하나, 둘, 세개의 점으로 이루어진다. 버텍스(vertex)는 단순히 좌표 공간상의 하나의 점이다. 

 

그래픽스 파이프 라인은 두개의 주요 파트로 분할된다

1) 프론트엔드(front end)

버텍스와 피리미티브를 처리하여 점,선,삼각형으로 구성하고 이들을 래스터라이저에 보내는 역할을 한다.

이 과정을 피리미티브 어셈블리(primitive assembly) 라고도 한다.

래스터라이저 이후에는 지오메트리가 벡터 형태에서 대량의 각각의 픽셀로 변환되어 백엔드로 전달한다.

 

2)백엔드(back end)

깊이 및 스텐실 테스트, 프래그먼트 쉐이딩, 블렌딩, 출력 이미지 갱신 등의 작업이 이루어 진다.

 

 

 

 

 

'computer graphics > opengl' 카테고리의 다른 글

기본 예제 분석  (0) 2020.03.21
설치 및 셋팅  (0) 2020.03.20
opengl 설치 및 예제, 컴파일  (0) 2019.12.16
Comments