4장
4.1 컬러 표현
Direct3D는 RGB 세 성분을 이용해 컬러를 표현한다.RGB양을 지정하여 컬러를 표현하며,세 가지 성분을 결합하여 최종 컬러를 만들어낸다.세 가지 컬러 성분의 조합을 통해 수백만 가지의 컬러를 표현할 수 있다.
RGB 데이터를 보관할 구조체의 타입에는 두 가지가 있다. 첫번째는 32비트의 DWORD로 형 정의된 D3DCOLOR 형으로,D3DCOLOR 형의 비트는 네 개의 8비트 섹션으로 나눠지고,각각의 섹션은 컬러 성분의 진하기를 저장한다. 그 분배 방식은 다음과 같다.
각각의 컬러 성분이 하나의 바이트를 이용하므로 컬러의 범위는 0-255 사이가 된다.0의 가까운 값은 낮은 진하기를 나타내며, 255에 가까운 값은 높은 진하기를 나타낸다.
각 성분의 값을 지정하고 이를 D3DCOLOR 형의 적절한 위치에 저장하기 위해서는 약간의 비트 연산이 필요하다. Direct3D는 이 작업을 대신 해주는 D3DCOLOR_ARGB라는 매크로를 제공하는데, 매크로는 각각의 컬러 성분과 알파 성분을 위한 인자를 가지고 있으며, 이 인자들은 0-255사이의 값을 가질 수 있다.
레드 = D3DCOLOR_ARGB(255,255,0,0);
선택적으로 이용할 수 있는 D3DCOLOR_XRGB 매크로는 알파 인자를 받지 않는다는 점을 제외하고는 앞서의 매크로와 동일하다. 이 매크로는 알파를 0XFF로 지정한다.
D3D에서 컬러를 저장하는 두번째 방법은 D3DCOLORVALUE 구조체를 이용하는 것이다. 이 구조체는 각각의 컬러 성분에 부동 소수점 값을 이용한다. 값의 범위는 0에서 1사이이며, 0은 가장 낮은 진하기를 1은 가장 높은 진하기를 의미한다.
typedef struct D3DCOLORVALUE {
float r ; 11 적색 성분, 범위 , 0 . 0- 1. 0
float g ; 11 녹색 성분, 범위 , 0.0-1. 0
float b ; 11 청색 성분 , 위, 0 . 0- 1. 0
float a; 11 알파 성분, 범위 , 0 . 0- 1. 0
) D3DCOLORVALUE;
이외에도 D3DXCOLOR 구조체를 이용할 수도 있는데 이 구조체는 D3DCOLORVALUE와 동일한 데이터 멤버들을 포함하지만 컬러의 관리를 도와주는 몇 가지 유용한 생성자와 오버로드된 연산자들을 제공하고 있다.
4.2 버텍스 컬러
기본형의 컬러는 이를 구성하는 버텍스의 컬러에 따라 결정된다. 따라서 우리의 버텍스 데이터 구조체에 컬러 멤버를 추가해야 한다. Direct3D는 버텍스의 컬러를 지정하는데 32-비트 데이터를 요구하므로 D3DCOLORVALUE 형을 이용할 수는 없다는 데 주의하자.
4.3 셰이딩
셰이딩은 래스터라이즈 과정중에 이루어지며 기본형을 구성하는 픽셀 컬러를 계산하는 데 버텍스 컬러가 이용되는 방식을 결정한다. 현재는 플랫 셰이딩과 그라우드 셰이딩의 두 가지 방식이 있다.
플랫 셰이딩 상에서는 기본형의 첫번째 버텍스에 지정된 컬러를 이용해 일관적으로 기본형의 픽셀을 채운다 한 컬러에서 다른 컬러로의 부드러운 전환이 없기 때문에 다소 단조로운 표현이 만들어진다. 그라우드 셰이딩은 부드러운 셰이딩 방식이며, 기본형의 면은 따라 보간된 컬러가 버텍스에 입혀진다.
D3D의 다른 것들과 마찬가지로 렌더 상태를 변경하여 셰이딩 모드를 지정할 수있다.
Device->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_FLAT);
Device->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD);
4.5 요약
적색, 녹색, 청색의 세 가지 컬러 성분의 진하기를 지정하여 컬러를 표현할 수 있으며, 이 세 가지 성분의 진하기 조합을 통해 수백만 가지의 컬러르 나타낼 수 있다. Direct3D 코드에서는 D3DCOLOR,D3DCOLORVALUT, 또는 D3DXCOLOR형을 이용하여 컬러를 지정할 수 있다..
때로는 4D 벡터(r,g,b,a)형식으로 컬러를 처리할 수 있다. 일반적인 벡터와 마찬가지로 컬러 벡터에도 더하기,빼기 ,크기 변형 등의 연산이 가능하지만 내적과 외적은 의미가 없다.
각각의 버텍스에 컬러를 지정할 수 있으며, Direct3D는 우리가 지정한 버텍스 컬러와 셰이드 모드를 이용 래스터라이즈 과정에 픽셀 컬러를 계산해낸다.
플랫 셰이딩 모드에서는 가본형의 첫번째 버텍스에 지정된 컬러로 전체 기본형의 픽셀 컬러를 채우고, 그라우드 모드에서는 각각의 버텍스의 컬러를 보간하여 기본형의 면을 채운다.