directx 9 ch4

Download Report

Transcript directx 9 ch4

제 4장
컬 러
 Direct3D에서 컬러를
표현하는 방법을 배운다
 삼각형에서의 컬러 셰이드
구현 원리를 이해한다.
목 표
4.1 컬러 표현 ( RGB 조합으로 표현 )
RGB 데이터를 보관할 구조체의 타입 두 가지가 있다.
1) 32비트의 DWORD로 형 정의된 D3DCOLOR 형으로, 비트는 네 개의 8비트
섹션으로 나누어지고, 각각의 섹션은 컬러 성분의 진하기를 저장
컬러의 범위는 0-255, 0의 가까운 값은 낮은 진하기, 255에 가까운 값은 높은 진하기
32-비트
알파
적색
녹색
청색
D3DCOLOR형의 적절한 위치에 저장하기 위해 약간의 비트 연산 필요
: D3DCOLOR_ARGB 매크로 제공
D3DCOLOR_ARGB : 각각의 컬러 성분 인자, 알파 성분 인자, 이 인자들은 0-255 값.
D3DCOLOR_XRGB : 알파 인자를 받지 않는 점을 제외하고 위 매크로와 동일.
4.1 컬러 표현 ( RGB 조합으로 표현 )
RGB 데이터를 보관할 구조체의 타입 두 가지가 있다.
2) 두번째 방법: D3DCOLORVALUE 구조체를 이용
각각의 컬러 성분에 부동 소수점 값을 이용
값의 범위는 0-1사이, 0은 가장 낮은 진하기, 1은 가장 높은 진하기
이외에도 D3DXCOLOR 구조체를 이용할 수 있다.
D3DCOLORVALUE와 동일한 데이터 멤버들을 포함하지만 컬러의 관리를 도와주는 몇 가지
유용한 생성자와 오버로드된 연산자들을 제공하고 있다.
또한 도일한 데이터 멤버들을 포함하고 있으므로 두 구조체를 서로 형 변환하는 것이 가능.
4.1 컬러 표현 ( RGB 조합으로 표현 )
이외에도 D3DXCOLOR 구조체를 이용할 수 있다.
D3DCOLORVALUE와 동일한 데이터 멤버들을 포함하지만 컬러의 관리를 도와주는 몇 가지
유용한 생성자와 오버로드된 연산자들을 제공하고 있다.
또한 동일한 데이터 멤버들을 포함하고 있으므로 두 구조체를 서로 형 변환하는 것이 가능.
NOTE
D2DCOLORVALUE 와 D3DXCOLOR 구조체는 모두 네 개의 부동 소수점 성분을 가지고 있다는데 주의하자!
이는 하나의 컬러를 4D 벡터(r, g, b, a)로 처리하는 것과 비슷하다. 컬러 벡터는 다른 일반적인 벡터들과
마찬가지로 더하고, 빼고, 크기 변형을 할 수 있다. 한편, 컬러 벡터에 대해서는 내적과 외적은 의미가 없으며,
성분 단위의 곱만 의미를 가진다. 이 때문에 D3DXCOLOR 클래스의 컬러-컬러 곱 연산자는 성분 단위의 곱을
수행한다.
4.2 버텍스 컬러
기본형의 컬러는 이를 구성하는 Vertex의 컬러에 따라 결정.
- Vertex 데이터 구조체에 컬러 멤버 추가.
주의!!) Direct3D는 Vertex의 컬러를 지정하는데 32-비트 데이터를 요구하므로
D3DCOLORVALUE 형을 이용할 수 없다!
( Vertex 셰이더를 이용하면 벡터 컬러에 4D 벡터를 이용할 수 있으므로
실제로는 128-비트 컬러를 얻는 것이 된다. Vertex셰이더는 17장에서다룬다)
Struct ColorVertex
{
float _x, _y, _z;
D3DCOLOR _color;
static const DWORD FVF;
}
Const DWORD COlorVertex::FVF = D3DFVF_XYZ | D3DFVF_DIFFUSE;
4.3 셰이딩
래스터라이즈 과정중에 이루어지며 기본형을 구성하는 픽셀 컬러를
계산하는데 버텍스 컬러가 이용되는 방식을 결정.
플랫 셰이딩(Flat shading) : 기본형의 첫번째 버텍스에 지정된 컬러를 이용해
일관적으로 기본형의 픽셀을 채운다.
그라우드 셰이딩(Gouraud shading) : 스무스 셰이딩. 부드러운 셰이딩 방식
기본형의 면을 따라 보간된 컬러가 버텍스에 입혀진다.
// 플랫 셰이딩 모드로 지정
Device->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_FLAT);
//그라우드 셰이딩 모드로 지정
Device->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD);
4.4 예제 애플리케이션 : 컬러를 입힌 삼각형
과제로 스스로 해봅시다!!