Vertex Formats ¶
3장의 학습목표!!
- Direct3D의 두가지 목적을 이해한다.
- 점을 표현하기 위한 유연한 vertex형태를 이해한다.
- Transformed 버텍스와 Untransformed 버텍스의 차이를 안다.
- 버텍스 버퍼가 무엇인지 알고 사용법을 안다.
- 인덱스 버퍼가 무엇인지 알고 사용법을 안다.
Direct3D의 목적 ¶
...
만약 D3D를 쓰는 사람에게 "당신은 왜 D3D를 씁니까?" 라고 물으면, 일반적으로 이런 대답이 나온다. Z-Buffer라던지, 모델, 메시, 버텍스 셰이더와 픽셸세이더, 텍스쳐, 그리고 알파 에 대한 이야기를 한다. 이것은 많은 일을 하는 것처럼 보인다. 몇몇을 제외하면 이런 것들은 다음의 커다란 두 목적의 부가적인 것이다. 그 두가지란 Geometry Transformation과 Polygon Rendering이다. 간단히 말해서 D3D의 교묘한 점 처리와 삼각형 그리기라는 것이다. 물론 저것만으로 모두 설명할 수는 없지만, 저 간단한 것을 마음속에 품는다면 혼란스러운 일은 줄어들 것이다.
...
만약 D3D를 쓰는 사람에게 "당신은 왜 D3D를 씁니까?" 라고 물으면, 일반적으로 이런 대답이 나온다. Z-Buffer라던지, 모델, 메시, 버텍스 셰이더와 픽셸세이더, 텍스쳐, 그리고 알파 에 대한 이야기를 한다. 이것은 많은 일을 하는 것처럼 보인다. 몇몇을 제외하면 이런 것들은 다음의 커다란 두 목적의 부가적인 것이다. 그 두가지란 Geometry Transformation과 Polygon Rendering이다. 간단히 말해서 D3D의 교묘한 점 처리와 삼각형 그리기라는 것이다. 물론 저것만으로 모두 설명할 수는 없지만, 저 간단한 것을 마음속에 품는다면 혼란스러운 일은 줄어들 것이다.
...
Vertex데이터의 표현 ¶
버텍스 데이터를 표현하는 방법은 많이 있고, D3D개발자들은 그들에게 편한 방식으로 접근했다. 어떤 버텍스는 다른 것보다 정보가 더 필요했고 다른 것들은 좀 더 달랐다.
버텍스를 표현 하는 방법을 flexible vertex format 줄여서 FVF라고 한다. 버텍스에 필요한 정보는 다음과 같다.
버텍스를 표현 하는 방법을 flexible vertex format 줄여서 FVF라고 한다. 버텍스에 필요한 정보는 다음과 같다.
~cpp position : 점의 위치, 가장 중요한 정보이다. RHW : Reciprocal of the homogenous W coordinate Blending weights : 블랜딩 매트릭스 Vertex normal Vertex point size : 버텍스의 크기 (포인트스프라이트에서 사용한다.) Diffuse color Specular color Texture coordinates
RHW ¶
RHW는 동치좌표 W의 역수 입니다. 그러면 동치 좌표란 무엇이냐. 이것은 좌표계의 또 다른 점입니다. 이게 있음으로 우리는 4차원 좌표계가 됩니다.(??)
어쨌든 W좌표는 우리가 일하기 편하게 해줍니다.
어쨌든 W좌표는 우리가 일하기 편하게 해줍니다.
SeeAlso : http://member.hitel.net/~kaswan/feature/3dengine/rhw.htm
~cpp #define CUSTOM_VERTEX_FVF D3DFVF_XYZ | D3DFVF_RHW struct CustomVertex { float x, y, z; float rhw; };
Vercto Normal ¶
이것은 3차원 좌표로서, 기본적인 x,y,z에 수직인 곳의 좌표를 정한다. 이것은 나중에 빛에 관련된 계산을 할 때에 사용된다.
~cpp #define CUSTOM_VERTEX_FVF D3DFVF_XYZ | D3DFVF_NORMAL struct CustomVertex { float x, y, z; float nx, ny, nz; };이 노말 좌표를 사용하면 RHW는 사용할 수 없다. (둘은 함께 사용할 수 없다는 뜻입니다.)
Diffuse Color ¶
노말 좌표 뒤에 오는 정보로는 diffuse color가 있다. Diffuse color란 것은 빛이 그 점을 밝혔을 때 그 점에서 발산하는 컬러를 말한다. 3D에서의 빛은 실제 생활과는 달리 거의 아무일도 하지 않는 다는 것을 기억하다.
Diffuse Color의 형태는 D3DCOLOR(사실은 DWORD형이다.)형을 사용한다.
Diffuse Color의 형태는 D3DCOLOR(사실은 DWORD형이다.)형을 사용한다.
~cpp #define CUSTOM_VERTEX_FVF D3DFVF_XYZ | D3DFVF_RHW | D3DFVF_DIFFUSE struct CustomVertex { float x, y, z; float rhw; D3DCOLOR diffuse; };