CS/Computer Graphics

[OpenGL로 배우는 컴퓨터 그래픽스] 1~6장 개념 총정리

Yeji Heo 2023. 4. 25. 15:48

1.  그래픽스의 구성요소

컴퓨터 그래픽스는 모델링과 렌더링으로 구성된다.

모델링이란 물체의 정점을 정의함으로써 물체를 만들어내는 것을 말한다.

렌더링이란 화면에 물체를 어떻게 그려낼지를 정의하는 작업에 해당한다.

 

2.  그래픽 시스템의 구성

그래픽 시스템은 입력장치(키보드 등), 워크스테이션(컴퓨터), 그래픽 컨트롤러(GPU), 출력장치(모니터 등)로 구성된다.

 

3.  래스터장치와 벡터장치의 역할과 차이점

래스터장치는 픽셀을 통해 그래픽을 출력하는 장치이다. 픽셀은 R,G,B로 구성된 인점이며, 그 정보들은 프레임버퍼에 저장한다.

픽셀로 표현하다보니 부동소수좌표를 정수좌표로 저장하는 래스터화가 필수적이며, 이에 따라 물체를 정확히 표현하는데에는 계단현상(Alias)라는 한계가 존재한다. 픽셀이 많아지고 정교해지면 오차는 줄어들겠지만 해상도를 무한대로 높일 수는 없기 때문이다.

한편, 벡터장치는 전자빔이 닿는 곳을 밝히는 방식으로서 고해상도로 정밀하게 선을 그려낼 수 있다.

그러므로 Alias도 발생하지 않는다. 래스터장치와 달리 프레임버퍼가 아닌 디스플레이리스트에 명령어들만 저장하면 되기 때문에 저장용량도 적게 든다. 다만 채움 도 등을 그릴 떄 그 처리시간이 많이 필요하다.

 

4.  래스터화란?

정점, 선분, 다각형 내부 등을 표현하기 위해 어떤 화소를 선택해야하는지 결정하는 작업이다.

물체좌표에서 화면좌표로 바꾸고, 부동소수 좌표를 정수좌표로 바꾸는 작업을 한다.

 

5.  RGB, CMY, CMYK, HSV, CIE, CIE*L*a*b각각의 개념과 차이점

RGB는 인간 눈의 원추세포가 Red, Green, Blue 세 가지 색상에 가장 민감하게 반응한다는 삼중자극이론을 바탕으로 만들어진 컬러모델이다. 세 가지를 합쳤을 때 흰색이 도출되는 가산모델에 해당한다.

CMYRGB컬러모델의 보색개념의 컬러모델이다. 시안, 마젠타, 옐로우를 합치면 검은색이 나오는 감산모델로서 물감의 컬러모델에 해당하고 프린트에 주로 사용되는 컬러모델이다.

CMYKCMY에 회색농도K의 개념을 추가한 컬러모델이다. 잉크비용이나 건조시간을 줄일 수 있다는 장점이 있으며, 완벽한 보색차단으로 회색농도를 정밀하게 표현 가능하다.

CIE는 모든 자연색을 표현하고자 고안된 가상의 3원색이다. 하지만 인간의 눈으로 색상의 변화를 명확하게 인지하는데에 한계가 있어 CIE L*a*b*모델이 등장하였다.

CIE *L*a*b*모델은 웨버의 법칙과 연관하여 눈의 색상의 변화 감지를 위해 선형적으로 만들어 준 컬러 모델이다.

 

6.  RGB컬러모드와 인덱스 컬러모드의 차이점

RGB컬러모드는 픽셀의 인점에 R,G,B색상 표현을 위한 용량을 차지하고있다면, 인덱스 컬러모드는 CLUT의 인덱스 값을 프레임버퍼 내용으로서 가지고 있다. 실제 색상은 CLUT 우측 칼럼에 의해 결정된다.

이에 따라 적은 용량으로도 색 표현이 가능하다. 인덱스 컬러모드는 색상이 유사한 그림(숲 속에 있는 청개구리 등)에서 유용하게 사용된다.

 

7.  하프토우닝기법과 디더링 기법의 개념, 차이

둘 모두 그레이스케일처럼 보이는 영상을 만들기 위한 방법에 해당하지만 그 원리에는 다음과 같은 차이가 존재한다.

하프토우닝은 점의 크기를 달리하고 사람 눈의 인지체계를 이용하여 01(흑과 백)만으로도 그레이스케일처럼 보이는 영상을 그려내는 기법이다. 실제 컴퓨터에서는 점의 크기를 바꿀 수 없기 때문에 개수를 조절하는 디지털하프토우닝을 사용하며, 결과적으로 해상도의 감소가 있다. (특히나 확대했을때는 그 해상도의 감소를 명확히 느낄 수 있다.)

한편, 디더링은 오류확산이나 패턴디더 방식을 사용하여 실질적 해상도를 줄이지 않으면서도 그레이스케일을 만들어내는 방법이다. 오류확산은 현재화소를 기준으로 인접한화소에 오류를 확산하는 방식이고, 패턴디더는 모든 화소 회색도를 8로 정규화하여 마스크를 씌워주는 방식이다. 정규화 값이 행렬값보다 크면 가장 가까운 색, 작으면 배경색으로 구분하는식의 원리이다.

 

8.  감마수정은 무엇이며 왜 필요한가

인점의 밝기는 전자빔의 밝기에 비 선형적으로 반응한다. 그러므로 이를 선형적으로 맞춰주는 작업이 감마수정이다.
감마수정을 하지 않으면 프로그래머의 예상보다 화면은 더욱 어둡게 나타나므로 감마수정은 필요하다. 단순히 밝기를 밝혀주는 작업이라기 보다는, 모니터와 소프트웨어의 반응을 선형적으로 일치시켜주는 작업으로 볼 수 있다.
감마수정은 정규화 회색도 값을 미리 변형하는 방식으로한다.

 

9.  GL, GLU, GLUT 라이브러리 각각의 역할

GL은 오픈지엘의 코어 라이브러리로서 기본적인 렌더링 기능을 제공한다. 기본적인 도형그리기, 변환, 조명 등이 포함된 라이브러리를 제공하고있다.

GLU GL의 사용성을 위한 도우미로서 다각형 분할이나 투상과 같은 고급기능을 제공한다.

GLUT는 윈도우기능과 콜백기능을 처리한다. 운영체제와 맞닿아있어 윈도우를 제어하는 인터페이스를 제공하며 사용자 입력 이벤트를 처리하는 콜백 기능도 핵심이된다.

 

10.  GPU의 설계원리

GPU는 모델링 된 물체를 그리기 위한 수많은 계산을 효과적으로 처리하기 위해서 파이프라인 구조로 설계되었다.

파이프라인 구조는 컨베이어시스템과 같이 분업에 의한 동시(병렬)적 처리로 처리시간을 향상하는 데 효과적이다.

한편, 파이프라인 서브 프로세서는 모두 하드웨어화 되어있다. 크게 입력->변환->투상->절단->래스터->출력으로 이루어져 있으며, 이는 하드웨어적으로 고정된 파이프라인 처리순서이다.

따라서 지엘이 이를 변경할 수는 없고 단지 서브 프로세서들에게 상태변수를 전달하는 역할을 한다. 개별 프로세서는 이 상태변수 값을 기준으로 자동실행된다.

 

11.  논리적 입력장치를 설정하는 이유

물리적 입력 장치의 종류에 관계없이 논리적 입력을 취급하여 다양한 하드웨어에 대해 통일된 입력 인터페이스를 설정하기 위함이다.

, 키보드나 마우스 등 물리적 입력장치가 바뀌어도 프로그램은 동일하다.

 

12.  리퀘스트모드, 샘플모드, 이벤트모드의 차이

리퀘스트모드는 프로그램이 실행되고 메져프로세스에 리퀘스트를 보내면 대기하고, 메져프로세스는 트리거 프로세스로부터 트리거를 받았을 때 프로그램에 메져를 보낸다.

샘플모드는 메져가 미리 준비된 상태에서 프로그램이 리퀘스트를 보내면 메져를 보내주는 방식이다.

한편, 이벤트모드는 리퀘스트모드나 샘플모드와 달리 사용자의 입력선택으로 사용자측에서 주도권을 가진다.

여러개의 이벤트가 발생하는 경우 순서대로 처리하기 위해 이벤트 큐를 사용한다.
입력장치아이디, 메져이벤트타입 등은 하나의 이벤트레코드로 저장된다.
응용프로그램은 주기적으로 이벤트큐를 확인하며, 이벤트 레코드가 들어있으면 프런트레코드를, 비어있으면 다른일을 수행한다.

 

13.  GL화면 좌표계와 GLUT화면 좌표계의 차이점

GL화면 좌표계는 좌측 하단을 기준으로하고

GLUT화면 좌표계는 좌측 상단을 기준으로 한다.

 

14.  더블버퍼링이 필요한 이유

비디오 컨트롤러가 버퍼를 read하는 속도는 그래픽 프로세서가 write하는 속도보다 빠르기 때문에 둘 사이에 속도차가 발생한다. 이 속도 차이로 인해 화면이 깜빡거리는 등 문제가 발생하며, 그 해결 방법은 더블버퍼링이다.

프론트버퍼와 백버퍼로 2개의 버퍼를 활용해 비디오컨트롤러가 프론트버퍼를 읽는 동안 그래픽 프로세서는 백버퍼에 write하고 또 서로 스위칭하는 방법이다. 그래픽 프로세서를 더 빠르게 하는 게 아닌 이상 더블 버퍼링은 효과적인 문제해결의 방법이다.

 

15.  정점배열이란 무엇이며 왜 필요한가

정점 배열은 구체적인 정점좌표대신 정점 아이디를 나열한 목록이다. , 개별 정점을 가리키는 일종의 포인터라고 볼 수도 있으며, 정점배열의 정점리스트를 통해 함수 호출 횟수를 줄일 수 있다.

 

16.  디스플레이리스트의 필요성과 사용법을 직접모드와 보류모드로 연관시켜 설명

지엘의 실행모드에서 직접모드는 화면 렌더링과 동시에 물체정보를 모두 파기한다. 그러므로 다시 그리려면 전체 코드를 다시 실행해야 하는 반면, 보류모드는 이미 정의했던 물체를 컴파일 된 형태로 재사용한다. 보류모드는 디스플레이 리스트를 통해 이루어지며, 디스플레이리스트는 기본요소/상태변수/영상은 물론 이동/회전/조명작업 등 명령을 집어넣을 수 있고 반복적으로 수행할 명령어를 내부에 포함시킴으로써 프로그램 속도를 향상시킬 수 있다.

 

17.  어파인 공간은 무엇이며 정의하는 이유는?

벡터는 크기와 방향을 가지지만 정점요소는 없다. 점과 벡터를 동족취급함으로써 벡터 공간을 확장한 공간을 어파인공간이라고 부르며, 어파인공간에서는 벡터와벡터의 덧셈뺄셈/스칼라와벡터의 곱셈나눗셈은 물론 점과 벡터의 덧셈뺄셈과 같은 어파인 연산이 가능해지기 때문에 정의한다.

 

18.  동차좌표를 정의하는 이유

기본적으로 점과 벡터는 표현방식이 서로 다르다. 공간에서 점과 벡터를 동일한 방식으로 표현하기 위해 동차좌표를 정의한다. 3차원의 좌표에서 3개의 요소로 표현하던 것을 한 차원을 올려 4개의 요소로 표현할 수 있게 만들고 마지막 요소가 0이면 벡터, 1이면 점이라고 해석하는 등 통일된 표현이 가능하다.

 

19.  복합변환에서 순서에 유의해야 하는 이유(이동 후 회전과 회전 후 이동의 결과가 같은가?)

행렬곱으로 표현되는 변환은 행렬곱의 특성상 교환법칙이 성립하지 않는다. 따라서 교환법칙을 무작정 적용하여 변환 순서를 바꿀 경우 서로 다른 결과가 도출된다. , 이동 후 회전과 회전 후 이동은 결과가 다른 것이다.

한편, 결합법칙은 성립하기 때문에 복합변환행렬을 먼저 계산한 후 정점에 곱하는 등의 연산은 가능하다.

 

20.  원점기준회전과 중심점기준회전의 차이

기본적인 회전은 원점을 기준으로하지만, 원점에서 떨어져있는 경우 원점기준 회전과 피벗기준회전(중심점기준회전)을 구분해야 한다. 피벗기준회전은 물체를 원점으로 옮긴 후 원점기준회전을 하고 다시 왔던 방향으로 물체를 이동하는 과정을 거친다.

 

21.  그래픽 변환의 종류와 특징

그래픽 변환에는 강체변환, 유사변환, 어파인변환, 원근 변환, 선형변환 등이 있다.

강체변환은 물체의 모습이 불변하는 변환으로 단순 이동변환이나 회전변환등이 포함된다.

유사변환은 강체변환을 포함하며 균등 크기조절 변환 역시 속한다. 물체가 변하기는 하지만 그 형태를 유지하면서 변하는 것이다. 따라서 물체면 사이각이나 정점간 거리비율이 일정하게 유지된다.

어파인변환은 유사변환을 포함하며 여기에 차등 크기변환과 전단이 추가로 속한다. 이 변환은 물체의 타입이 유지되는 변환으로서 직선은 직선, 곡면은 곡면 등 타입을 유지하는 것이다. 변환행렬의 마지막 행이 항상 0,0,0,1이라는 특징이 있다.(예를 들어 어파인 변환에 속하는 전단의 변환 행렬을 확인해보면 알 수 있다.)

원근 변환은 평행선이 만나게 함으로써 원근감을 주는 변환이다.

선형변환은 어파인변환+원근변환으로 선형조합으로 표시되는 변환이다.

 

22.  모델좌표계, 전역좌표계, 시점좌표계

모델 좌표계는 각 모델을 기준으로 하는 좌표계이며 지역좌표계(로컬좌표계)로도 불린다. 전역좌표계(월드좌표계)는 모델이 여러 개일 경우 여러 지역좌표계가 존재하게 되므로 이들을 일률적으로 어우르고 상대적 위치를 결정할 수 있게 하는 좌표계이다.

시점 좌표계는 카메라좌표계로서 카메라의 위치와 각도등을 표현하는 좌표계이다.

 

23.  변환행렬의 의미

좌표는 파이프라인을 따라 전역좌표계,모델좌표계, 시점 좌표계와 같은 일련의 좌표계를 거치면서 변환되어 최종적으로 화면에 나타난다. 이동 변환을 예로 들었을 때, 지엘의 입장에서 모델좌표계와 전역좌표계는 변환과 동시에 분리되며, 변환 후에도 모델좌표계기준의 정점좌표는 불변한다. 전역좌표계를 적정수준 이동하면 모델 좌표계와 일치한다는 점에서 전역좌표계를 모델좌표계로 일치시키기 위한 것이 변환행렬이라고 볼 수 있다.

 

24.  물체 변환과 함수호출순서의 관계

복합변환이 일어나는 물체에 가해지는 변환순서는 OpenGL함수 호출 순서의 역순이다.

 

25.  행렬스택이 필요한 이유와 활용방법

어떤 물체를 기하변환하며 계속해서 그리다가 다시 처음이나 과거의 물체를 그리고자 이전 좌표계로 되돌려야하는 상황이 발생한다. 좌표계를 스택을 활용해 저장해두면 효율적으로 이 과정의 처리가 가능하다. 이를 위해 지엘에서는 glPushMatrix(), glPopMatrix()를 활용할 수 있다. glPushMatrix로 좌표계를 저장하면 CTMstack에 쌓이며, 돌아가고 싶을 때에는 pop해주면 된다.

 

26.  계층구조모델링의 특징

계층구조모델링은 순방향 키네마틱스와 역방향 키네마틱스로 구분되며, 순방향키네마틱스의 경우 계층구조의 상위에서 하위로 내려오면서 사용자가 직접 필요한 회전각을 지정해주어야한다. 역방향 키네마틱스는 가장 하위부터 명시함으로써 상위 물체의 움직임은 컴퓨터 내부에서 자동으로 계산되게 하는 방법이다.