래스터라이저가 출력하는 프랙그먼트별 애트리뷰트는 대체로 노멀과 텍스처 좌표를 포함한다.
프래그먼트 쉐이더는 이 데이터를 이용해 프래그먼트의 색상을 계산한다.
프래그먼트 쉐이더에서 하는 중요한 일
- 라이팅(lighting)
- 텍스처링(texturing)
텍스처링(texturing)
다양한 텍스처링 기법 중에서 가장 간단한 것은 오브젝트 표면에 이미지를 묘사하는 이미지 텍스처링이다.
8.1 텍스처 좌표
텍스처
- 일반적으로 배열 구조를 가짐
- 이미지 텍스처(image texutre)
- 배열이 색상을 가지고 있는 것
- 텍스처링 기법 중 가장 간단한 기법은 이미지 텍스처링
- 텍셀(texel, texture element)로 구성
- 각 텍셀의 위치는 그 중심의 2차원 좌표로 표현할 수 있다. ex) 위 그림에서 왼쪽 아래 모퉁이 텍셀의 좌표는 (0.5, 0.5)
텍스처링
물체 표면에 벽지 바르듯이 텍스처를 입히는 것으로 이해하면 된다.
맨 위 사진에서 이미지가 원통면에 입혀진 것을 보면, 원통면 폴리곤 메시의 각 정점마다 텍스처 좌표(texture coordinates)를 할당해야 한다. 이는 오프라인 모델링 단계에서 이뤄진다.
텍스처 좌표
모델링 단계에서 텍스처 좌표는 보통 (s, t) 혹은 (u, v)로 표현한다. 각 좌표는 원칙적으로 [0, 1] 범위 안에 정규화되어 있다.
스캔 전환 알고리즘은 먼저 변을 따라, 그 다음에 스캔라인을 따라 텍스처 좌표를 보간한다.
스캔 전환이 완료되면 각각의 프래그먼트는 보간된 (s, t) 좌표를 가지게 된다.
2D 이미지를 3D 메시에 붙이는 방법
3D 메시를 2D 평면으로 펼친다.
펼쳐진 메시에 파라미터 공간(텍스처 공간을 추상화한 공간)을 매핑해서 각 정점에 고유한 텍스처 좌표를 할당한다.
(파라미터 공간은 정규화 되어 있음)
밑에 사진을 예로 들 수 있다.
빨간색 삼각형으로 표시된 메시를 보면, 정점들은 정규화된 텍스처 좌표들과 연관되어 있고, 삼각형 안은 노멀과 텍스처 좌표가 보간된다. 보간된 텍스처 좌표들은 텍스처 공간의 삼각형 영역에 투영된다.
해상도가 $r_x \times r_y$인 텍스처가 주어졌을 때, 정규화된 텍스처 좌표 (s,t)는 아래와 같은 방식으로 실제 텍스처 공간으로 매핑된다.
\begin{align}
s' = s \times r_x \\
t' = t \times r_y
\end{align}
이를 가리켜서 텍스처 좌표 (s, t)가 텍스처 공간의 (s', t')로 투영(project)되었다고 표현한다.
텍스처 좌표가 실제 텍스처 공간에 투영된 사진을 보면, $r_x = r_y = 4$인데, 위 식에 따라 텍스처 좌표 $\left( \frac{1}{8}, \frac{1}{8} \right)$은 텍스처 공간의 $\left(0.5, 0.5\right)$로 투영되고, 좌표를 가진 왼쪽 아래 모퉁이 텍셀을 읽어온다. 이 텍셀의 RGB 값이 왼쪽 아래 끝 프래그먼트의 색상 결정에 사용된다.
폴리곤 메시 정점들에 정규화된 텍스처 좌표를 할당하면, 상이한 해상도를 가진 여러 개의 텍스처를 사용할 수 있다.
위 사진에서 텍스처 좌표 (0.5, 0.5)는 어느 텍스처를 사용하건 그 텍스처의 정중앙을 의미한다.
texture1에서는 (2.5, 2.5)로, texture2에서는 (3.5, 3.5)로 투영된다.
그림을 보면, 원통면 폴리곤 메시의 텍스처 좌표 변경 없이도 상이한 해상도를 가진 두 개의 텍스처를 사용할 수 있다.
살펴본 예에서는 (s', t')가 항상 텍셀 한가운데로 투영되었는데, 이런 경우는 거의 없고 텍스처 공간 내 임의의 위치로 투영된다. 이를 처리하기 위한 방법은 뒤에 기술되어 있다.
텍스처는 2차원으로 국한되지 않고, CT, MRI 등과 같은 층층이 쌓인 영상이 3차우너 텍스처에 해당한다. 이를 볼륨 텍스처(volume texture)라고 부른다.
컴퓨터 그래픽스에서는 2차원 텍스처가 압도적으로 많이 쓰인다.
8.2 표면 파라미터화
표면 파라미터화(surface parameterization) 또는 파라미터화
- 폴리곤 메시의 각 정점에 텍스처 좌표(s, t)를 할당하는 작업
- 3차원 메시를 2차원 평면에 펼치고 펼쳐진 메시를 [0, 1]의 범위를 가지는 st 파라미터 공간에 매핑하면 각 정점에 (s, t) 텍스처 좌표가 할당
- 그 후에 정점 배열에 기록되어 정점 쉐이더에 전달
3차원 폴리곤 메시는 2차원 평면으로 펼치는 과정에서 대부분 왜곡 현상이 일어난다.
예를 들어, 3차원 메시를 구성하는 폴리곤들의 면적 비율이 2차원 평면에서 그대로 보존되지 않는다.(원통이나 원뿔은 왜곡 피하기 가능한데, 이는 예외적인 경우)
컴퓨터 그래픽스에서는 이를 해결하기 위해 꾸준히 연구 개발해왔다. 3ds Max 같은 그래픽스 패키지에서는 반자동적인 방법에 기반한 파라미터화 도구를 제공한다.
복잡한 폴리곤 메시는 여러 개의 패치(patch)로 나눠져 각각 파라미터화된다.
차트(chart)
- 그래픽 디자이너가 파라미터화가 완료된 2차원 패치에 포토샵 등을 이용하여 그리는 이미지
아틀라스(atlas)
- 효율적인 렌더링을 위해 여러 차트를 하나의 커다란 텍스처에 모은 것
텍스처링 과정
(1) 패치를 펼친다.
(2) 모든 삼각형의 정점에는 정규화된 매개변수 공간에서의 텍스처 좌표가 할당된다. 이 정보는 메시(정점 배열 내)에 저장된다.
(3) 차트가 생성되고 아틀라스에 통합된다.
(4) 텍스처 좌표는 각 조각에 (s, t)를 할당하기 위해 보간
(5) RGB 색상을 알아내기 위해 모델의 표변 좌표(x,y,z)를 텍스처 공간 좌표(s,t)에 투영
(6) 최종적으로 텍스처를 3D 모델에 입힌다.
8.3 GL에서의 텍스처 정의
텍스처 오브젝트를 위한 GL 프로그램
텍스처 하나가 GL 프로그램에 로드되어서 위 코드의 textData를 채웠다고 가정한다.
texels는 실제 텍셀들을 가리키고 width X height는 텍스처 해상도를 의미한다.
텍스처도 정점 배열의 버퍼 오브젝트 생성에 사용했던 glGenBuffers, glBindBuffer, glBufferData를 차례로 호출하는 생성, 바인드, 데이터 제공 순서와 유사하게 처리된다.
- 텍스처 오브젝트(texture object) 생성을 위해 glGenTextures(GLsizei n, GLuint* textures)를 호출
- glGenTextures는 n개의 텍스처 오브젝트를 texture에 저장
- 텍스처 오브젝트를 특정 텍스처에 바인드(bind)하기 위하여 glBindTexutres를 호출
- glBindTextures의 첫 번째 파라미터는 2차원 텍스처를 의미하는 GL_Texture_2D이고, 두 번째 파라미터는 glGenTextures가 생성한 텍스처 오브젝트의 ID(위 코드에서 texture)
- 텍스처 오브젝트를 실제 텍스처로 채우기 위하여 glTexImage2D 호출
- glTexImage2D를 호출할 때, 텍스처 오브젝트 ID(위 코드에서 texture)를 파라미터로 사용하지 않았는데, 실제로 glTexImage2D는 텍스처 오브젝트 ID를 필요로 하지 않는다. 텍스처 오브젝트가 바인딩되면, 그 이후에 호출되는 함수들은 기본적으로 바인딩된 텍스처 오브젝트를 사용하게 되어 있기 때문이다.
8.4 텍스처 포장
텍스처 좌표는 원칙적으로 [0, 1] 범위 안에서 정의되지만, GL은 그 범위 밖에서 좌표를 지정하는 것을 허용하고 이를 처리해준다.
텍스처 포장 모드(texture wrapping mode)를 설정하여 그 처리 방식을 조절할 수 있다.
- 경계 고정 모드(clamped to edge)
(a)의 이미지 텍스처가 (b)의 폴리곤 메시에 입혀진다고 가정한다.
폴리곤 메시의 세 정점은 [0, 1] 범위 밖의 텍스처 좌표를 가지고 있다.
이에 따라 래스터라이저가 생성하는 프래그먼트의 상당수는 [0, 1] 범위 밖의 텍스처 좌표를 가지게 된다.
이러한 텍스처 좌표는 [0, 1] 범위의 경계(edge)로 고정(clamp) 시킬 수 있다.
예를 들어, 한 프래그먼트의 s값이 1.1이라면 경계 값인 1.0으로 바꾸는 것이다.
- 반복 모드(repeat mode)
[0, 1] 범위를 벗어나는 텍스처 좌표가 주어지면 그 소수점 이하만 이용할 수도 있다.
예를 들어, s 값이 1.1이라면 이를 0.1로 대체한다. 위의 그림처럼 텍스처 좌표가 정수가 되는 지점에서 텍스처를 타일처럼 이어붙인 결과가 나온다.
작은 이미지로 넓은 영역을 텍스처링할 수 있으므로 경계 고정 모드보다 훨씬 많이 사용된다.
하지만, 텍스처 타일 사이의 경계선이 두드러져 보일 수 있다는 단점이 있다.
- 반사 반복 모드(mirrored repeat mode)
반복 모드의 단점을 극복하기 위해 사용한다.
예를 들어, s값이 1.1이라면 이를 0.9로 바꾸고, s값이 1.2라면 0.8로 바꾼다.
텍스처 타일은 정수의 텍스처 좌표마다 반사된 형태로 놓이게 되어 부드러운 결과를 얻을 수 있다.
- 반복 모드 + 반사 반복 모드
s축과 t축을 따라 서로 다른 모드를 사용할 수 있다.
GL에서 텍스처 포장 모드는 glTexParameteri를 이용하여 지정된다.
pname이 두 가지가 있고, param이 3가지가 가능하니 총 6가지 조합이 있다.
8.5 텍스처 필터링
프래그먼트의 텍스처 좌표(s, t)는 $s' = s \times r_x$, $t'=t \times r_y$ 식을 통해 텍스처 공간의 $\left(s', t' \right)$로 투영된다.
텍스처 필터링(texture filtering)
- 투영 후 (s', t') 주변의 텍셀을 고려해서 해당 프래그먼트의 색상을 결정하는 것
카메라 파라미터, 뷰 프러스텀 파라미터, 뷰포트 파라미터 등이 어떻게 설정되느냐에 따라 스크린 공간에서의 사각형 크기가 달라진다.
확대(magnify)
스크린 공간 사각형의 크기는 이미지 텍스처보다 크다. 따라서 텍스처는 사각형에 맞도록 확대된다.
텍스처 공간에서 격자 한 칸에 텍셀이 하나씩 위치하고, 동그란 점은 텍스처 공간에 투영된 픽셀을 나타낸다.(엄밀히 말하면, 프래그먼트라고 부르는게 맞다. 텍셀과 비교하려는 목적으로 픽셀이라고 책에서는 잠깐 이렇게 명칭한다)
확대의 경우는 텍셀보다 픽셀이 많다.
축소(minify)
스크린 공간 사각형의 크기는 이미지 텍스처보다 작다. 따라서 텍스처는 사각형에 맞도록 축소된다.
축소의 경우는 텍셀보다 픽셀이 적으므로, 픽셀들은 텍스처 공간에 듬성듬성 투영된다.
8.5.1 텍스처 확대
근접점 샘플링(nearest point sampling)
(s', t')와 가장 가까운 텍셀을 사용하는 것이다.
여러 개의 픽셀이 하나의 텍셀을 참조하게 되어, 모자이크 처리된 듯한 결과를 얻게 된다.(어린아이 머리와 배경 간 경계에서 두드러짐
만족스러운 결과를 생성하지 못한다.
겹선형보간(bilinear interpolation)
(s', t') 주의를 둘러싸는 네 개의 텍셀을 겹선형보간하여 해당 픽셀의 텍스처 색상을 결정하는 방법
테두리 바깥에 있는 텍셀에 가까운 픽셀들은 저 텍셀들을 사용할 것이다.
겹선형보간을 사용하면 인접한 픽셀일지라도 필터링된 색상이 달라질 수 있고, 이에 따라 근접점 샘플링보다 부드러운 텍스처링 결과를 얻을 수 있다.
대부분의 경우에 겹선형보간 기법은 근점점 샘플링보다 좋은 결과를 생성한다.
8.5.2 텍스처 축소
텍스처 축소의 경우에도 확대처럼 근접점 샘플링과 겹선형보간을 선택할 수 있을 것이라 생각할 수 있다.
하지만, 텍스처 축소의 경우에 픽셀들이 텍스처 공간에 듬성듬성 투영되었었다.
(a) 사진에서 동그란 점으로 그려진 네개의 픽셀은 모두 검은색 테셀에 둘러쌓여 있다.
이러한 경우에는 필터링 기법으로 근접점 샘플링을 하건 겹선형보간을 하건 관계없이 픽셀의 텍스처 색상은 검은색이 된다.
만약 스크린 공간 프리미티브의 모든 픽셀들이 검은색 텍셀에 둘러싸이게 되면, 텍스처링된 프리미티브는 완벽한 검은색이 된다.
즉, 격자 무늬의 이미지가 제대로 텍스처링 되지 않는다.
마찬가지로 (b) 사진에서도 텍스처 공간에 투영된 픽셀이 모두 회색 텍셀에 둘러싸이게 되어 격자 무늬 이미지가 제대로 텍스처링 되지 않고, 회색이 된다.
에일리어싱(aliasing)
- 고주파 신호(위 예에서 격자 무늬 이미지 텍스처)를 낮은 빈도로 샘플링(위의 예에서 듬성듬성 투영된 픽셀로 텍스처 필터링)할 때에 발생하는 오류
에일리어싱이 일으키는 부작용을 최소화하기 위한 앤티에일리어싱(anti-aliasing) 기술이 필요하다.
8.6 밉매핑
텍스처 축소 시, 에일리어싱 원인은 픽셀에 비해 텍셀이 너무 많아서 텍스처링에 참여하지 못하는 텍셀이 발생하기 때문이다. 따라서 텍스처를 작게 만들어서 텍셀 수를 픽셀 수에 맞추면 된다.
8.6.1 밉맵 생성
위 사진에서 왼쪽 끝에 있는 원본(original) 텍스처는 8 x 8 해상도를 갖는다.
이 원본 텍스처를 구성하는 2 x 2 텍셀들의 색상 평균을 구하는 작업을 반복하면, 원본 텍스처의 $\frac{1}{4}$ 크기를 가진 4 x 4 해상도 텍스처를 만들 수 있다. 이러한 다운샘플링(down-sampling)을 반복하면 원본 텍스처 전체의 평균 색상을 담고 있는 1 x 1 크기의 텍스처를 얻을 수 있다.
원본 텍스처의 해상도가 $2^ \times 2^l$일 때, 다운샘플링을 통해 $l$개의 텍스처를 새로 만들 수 있다.
원본 및 다운샘플된 텍스처들은 위 사진에서 우측 같이 총 $\left(l + 1\right)$개의 레벨을 가지는 텍스처 피라미드로 묶일 수 있다. 원본 텍스처는 0번 레벨에 위치한다. 이 피라미드를 밉맵(mipmap)이라 부른다. 이러한 밉맵을 사용하면, 텍셀 개수를 픽셀 개수에 맞출 수 있다.
8.6.2 밉맵 필터링
위 사진은 이해를 돕기 위한 작위적인 예제다.
(a)는 텍스처 축소의 경우를 보여주는데, 0번 레벨의 텍스처 즉 원본 텍스처가 스크린 공간 사각형의 네 배의 크기를 가진다.
(b)의 왼쪽은 0번 레벨 텍스처의 일부를 구성하는 64개의 텍셀을 보여주는데, 이 영역으로 16개의 픽셀이 투영되었다.
이제까지 픽셀을 스크린 공간의 한 '점'으로 간주해 왔고, 이 픽셀이 텍스처 공간의 한 '점'인 (s', t')로 투영된다고 설명해왔다. 하지만 실제로 픽셀은 스크린 공간의 작은 '영역'을 덮고 있다.
이 영역이 정사각형이라고 가정하면, 정사각형 픽셀들이 전체 스크린을 타일처럼 뒤덮고 있는 것으로 생각할 수 있다. 따라서 텍스처 공간에 투영된 픽셀은 (s', t')에 놓인 '점'이 아니라 (s', t')를 중심으로 일정한 '영역'을 차지하게 된다.
이 영역을 발자국(footprint)라고 부른다.
(b)의 0번 레벨 텍스처 오른쪽 아래 구석에 보인 것처럼 픽셀 발자국은 2 x 2 텍셀 영역을 차지한다. 텍셀이 픽셀보다 너무 많다. 1번 레벨에서 픽셀 발자국은 하나의 텍셀을 차지한다. 즉, 픽셀과 픽셀의 개수가 같다. 그러면 이 레벨에서 필터링이 수행된다(이 예에서는 픽셀의 중심이 텍셀의 중심과 일치하므로 근접점 샘플링과 겹선형보간 기법 모두 동일한 결과를 산출한다).
위의 (a)에서 0번 레벨의 텍스처 즉 원본 텍스처는 스크린 공간 사각형의 16배의 크기를 가진다.
(b)는 픽셀 발자국이 0번, 1번, 2번 레벨 텍스처에서 각각 4 x 4, 2 x 2, 1 x 1 텍셀들을 차지함을 보여준다.
띠리서 픽셀과 텍셀의 개수가 같은 2번 레벨을 선택할 것이다.
밉맵 0번 레벨에 있는 원본 텍스처의 RGB 값은 그 상위 레벨에 모두 포함되어 있다.
따라서, 밉맵의 어느 레벨을 골라 필터링을 하건, 원본 텍스처의 텍셀이 배제되는 경우는 없다.
필터링을 수행할 밉맵의 레벨을 λ로 표기하는데, 픽셀의 발자국이 0번 레벨 텍스처에서 m x m 텍셀을 차지하는 경우 λ는 $ \log_{2}{m}$으로 설정된다.
대개의 경우 m은 2의 거듭제곱이 아니다. 따라서 λ는 정수 아닌 실수가 된다.
위의 (a)에서 픽셀 발자국은 원본 텍스처에서 3 x 3 텍셀들을 차지한다.
따라서 $\lambda = \log_{2}{3} \simeq 1.585$가 된다. 이처럼 정수 아닌 λ가 계산되면, λ에 가장 가까운 레벨을 선택할 수 있다. $\left \lfloor \lambda + 0.5\right \rfloor $로 할 수도 있다. 이 식을 이용하면 2번 레벨이 된다.
더 좋은 방법은 $\left \lceil \lambda \right \rceil$와 $\left \lfloor \lambda \right \rfloor$ 두 레벨을 선택해서, 각 레벨을 필터링한 결과를 선형보간하는 것이다.
(b)에서 λ가 1.585이므로 1번과 2번 레벨을 선택하고, 두 레벨 모두 겹선형보간으로 필터링한 후, 그 결과를 λ의 소수점 이하 값 0.585를 이용해 선형보간한 결과를 보여준다. 이를 삼선형보간(trilinear interpolation)이라 한다.
대개의 경우 픽셀 발자국은 정사각형이 아니므로, 보다 복잡한 방법으로 λ가 계산된다. 그러나, 이 계산은 GPU가 전담하므로 응용 프로그래머는 신경 쓰지 않아도 된다.
8.7 GL에서의 밉맵 필터링
GL은 스크린 공간 각각의 픽셀에 대해 그 발자국을 계산한 후 텍스처가 확대되어야 하는지 아니면 축소되어야 하는지 결정한다.
glTexParameteri를 사용하여 텍스처 필터링 방법을 지정할 수 있다.
텍스처가 확대될 경우 필터링 방법 지정을 위해서 두 번째 파라미터 pname을 GL_TEXTURE_MAG_FILTER로,
축소의 경우 GL_TEXTURE_MIN_FILTER로 해야 한다.
pname이 GL_TEXTURE_MAG_FILTER라면, 즉 텍스처 확대의 경우라면, 항상 원본 텍스처가 사용되는데, glTexParameteri의 마지막 파라미터 param은 GL_NEAREST와 GL_LINEAR 중 하나를 가질 수 있다.
각각 근접점 샘플링, 겹선형보간을 의미한다.
반면, pname이 텍스처 축소를 의미하는 GL_TEXTURE_MIN_FILTER라면, glTexParameteri의 마지막 파라미터 param은 6개의 기호 상수 중 하나를 가질 수 있다.
첫 두개는 밉맵을 사용하지 않고 원본 텍스처만을 사용하도록 한다.
- GL_NEAREST: 원본 텍스처를 근접점 샘플링으로 필터링한다.
- GL_LINEAR: 원본 텍스처를 겹선형보간으로 필터링한다.
위 두 가지는 선호되지 않으므로, 나머지 네 개의 기호 상수는 실제로 맵매핑을 구현하는 것이다.
param은 GL_b_MIPMAP_a 형태를 가진다. a는 밉맵의 어느 레벨을 선택할 것인지, b는 그 레벨을 어떻게 필터링할 것인지 지정한다.
- GL_NEAREST_MIPMAP_NEAREST: 밉맵에서 가장 가까운 레벨을 근접점 샘플링으로 필터링
- GL_LINEAR_MIPMAP_NEAREST: 밉맵에서 가장 가까운 레벨을 겹선형보간으로 필터링
- GL_NEAREST_MIPMAP_LINEAR: $\left \lfloor \lambda \right \rfloor$와 $\left \lceil \lambda \right \rceil$ 레벨을 모두 근접점 샘플링으로 필터링한 후, 그 결과를 선형보간
- GL_LINEAR_MIPMAP_LINEAR: $\left \lfloor \lambda \right \rfloor$와 $\left \lceil \lambda \right \rceil$ 레벨을 모두 겹선형보간으로 필터링한 후, 그 결과를 선형보간
8.8 GL 밉매핑 예시
위 그림 (a)는 파란 줄무늬 텍스처가 밉맵으로 구성된 것을 보여준다.
밉매핑 작동 원리의 쉬운 이해를 위해 위 그림 (b)처럼 0번 레벨의 텍스처만 빨간색으로 바꾼 인위적인 밉맵을 사용한다.
위 그림 (b)의 밉맵을 그림 (c)의 가늘고 긴 사각형에 적용한다.
이 사각형이 시선 방향으로 크게 기울어져 있다고 가정한다.
즉, 사각형 윗부분은 카메라로부터 매우 멀리 떨어져 있고 아래 부분은 아주 가깝다면 스크린에서는 그림 (d)와 같은 모양을 가질 것이다.
GL은 스크린 공간 각각의 픽셀에 대해 텍스처를 확대할 것인지 혹은 축소할 것인지 결정하는데, 그림 (d)의 사각형 영역은 텍스처가 확대될 하단과 텍스처가 축소될 상단으로 나눠진다.
8.9 텍스처링을 위한 프래그먼트 쉐이더
텍스처링을 위한 프래그먼트 쉐이더
위 코드는 래스터라이저가 출력하는 각 프래그먼트에 대해 한 번씩 실행된다.
정점 쉐이더와 마찬가지로 프래그먼트 쉐이더도 유니폼을 취할 수 있는데, 대표적으로 텍스처가 있다.
5번 줄에 colorMap은 2차원 텍스처를 의미하며 유니폼이다.
프래그먼트 쉐이더에게 텍스처 좌표를 입력하기 위해서는 반드시 정점 쉐이더가 텍스처 좌표를 출력해야 한다.
하지만, 정점 쉐이더의 모든 출력을 프래그먼트 쉐이더가 반드시 취해야 하는 것은 아니다.
위 코드는 텍스처링을 위한 코드이므로, 정점 쉐이더가 전달한 v_normal(각 정점의 노멀 벡터 의미)를 사용하지 않는다.
출처
[OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문]을 보고 공부하고 정리한 내용
'공부 > 컴퓨터 그래픽스' 카테고리의 다른 글
OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문 Chapter 10 출력 병합기 (0) | 2024.07.12 |
---|---|
OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문 Chapter 09 라이팅 (0) | 2024.07.12 |
OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문 Chapter 07 래스터라이저 (0) | 2024.07.07 |
OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문 Chapter 06 OpenGL ES와 쉐이더 (0) | 2024.07.07 |
OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문 Chapter 05 정점 처리 (0) | 2024.07.05 |