모델표현 / 버텍스 포맷

2022. 8. 6. 17:50Public/GraphicsAPI

렌더링 파이프라인은 3D 세계에 대한 기하학적 표현과 이 세계를 바라보는 관점을 정의하는 가상 카메라를 이용해 2D 이미지를 만들어내는 역할을 담당한다.
 

모델표현

  • 장면(Scene)은 물체나 모델의 모음이다.
  • 물체는 삼각형 메쉬의 묘사로 이루어지는데, 메쉬의 삼각형은 물체의 기본적인 구성 성분이 되며, 다각형(polygon),기본형(primitive) 그리고 메쉬 기하물체를 상호 교환적으로 이용한다. 
  • 다각형에서 두 개의 변이 만나는 지점을 버텍스(꼭지점)라 한다. 하나의 삼각형을 만들기 위해서는 삼각형의 세 버텍스에 해당하는 세 개의 포인트 위치를 지정해야 하며 , 이 삼각형을 지정하여 물체를 묘사한다.

 
 

버텍스 포맷

앞서 설명한 버텍스의 정의는 수학적으로는 문제가 없지만, Direct3D에서 이용할 개념으로는 다소 불완전하다. 그 이유는 Direct3D 내의 버텍스가 공간적 위치 이외의 부가적인 특성으로 이루어져 있기 때문이다. 예를 들어, 하나의 버텍스는 법선 특성이외에도 색상 특성을 가질 수 있다. Direct3D는 우리 자신의 버텍스 포맷을 구성할 수 있는 유연성을 제공하는데, 다른 말로 하면 버텍스 속성을 정의할 수 있도록 해준다.
 

struct ColorVertex
{
	float _x, _y, _z; //위치
	DWORD _color;
};

struct NormalTexVertex
{
	float _x, _y, _z; //위치
	float _nx, _ny, _nz; //법선 벡터
	float _u, _v; //텍스처 좌표
};

버텍스 구조체를 완성한 다음에는 유연한 버텍스 포맷(FVF: flexible vertex format) 플래그 조합을 이용해 버텍스가 포맷팅되는 방법을 지정해야 한다. 앞서의 두 가지 버텍스 구조체를 이용한다면, 다음과 같은 버텍스 포맷이 만들어진다.
 

/*
버텍스 구조체를 완성한 다음에는 유연한 버텍스 포맷(FVF:flexible vetex format)플래그 조합을 이용해 버텍스가 포맷팅되는 방법을 지정해야 한다.
앞서의 두 가지 버텍스 구조체를 이용한다면, 다음과 같은 버텍스 포맷이 만들어진다.
*/
#define FVF_COLOR (D3DFVF_XYZ | D3DFVF_DIFFUSE)
/*
간단히 말하면, 위의 버텍스 포맷에 대응되는 버텍스 구조체는 위치 특성가 난반사 색상 특성을 포함한다.
*/
#define FVF_NORMAL_TEX (D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1)
/*
위의 버텍스 포맷에 대응되는 버텍스 구조체는 위치와 법선, 텍스처 좌표 특성을 포함한다. 한 가지 기억해야 할 점이 있다. 버텍스 구조체에 정의된 데이터
의 순서와 FVF의 정의된 순서는 반드시 일치해야 한다는 것이다.

우리가 이용할 수 있는 버텍스 포맷 플래그의 완전한 리스트는 sdk 문서의 D3DFVF 항목에서 찾을 수 있다.
*/
//*********************************************

 
 

'Public > GraphicsAPI' 카테고리의 다른 글

정점 버퍼  (0) 2022.08.14
FVF  (0) 2022.08.14
일반적인 WIN32 구조와 D3D 비교  (0) 2022.08.10
삼각형  (0) 2022.08.06
D3D Init  (0) 2022.08.05