= Vertex Formats = 3장의 학습목표!! * Direct3D의 두가지 목적을 이해한다. * 점을 표현하기 위한 유연한 vertex형태를 이해한다. * Transformed 버텍스와 Untransformed 버텍스의 차이를 안다. * 버텍스 버퍼가 무엇인지 알고 사용법을 안다. * 인덱스 버퍼가 무엇인지 알고 사용법을 안다. == Direct3D의 목적 == ... 만약 D3D를 쓰는 사람에게 "당신은 왜 D3D를 씁니까?" 라고 물으면, 일반적으로 이런 대답이 나온다. Z-Buffer라던지, 모델, 메시, 버텍스 셰이더와 픽셸세이더, 텍스쳐, 그리고 알파 에 대한 이야기를 한다. 이것은 많은 일을 하는 것처럼 보인다. 몇몇을 제외하면 이런 것들은 다음의 커다란 두 목적의 부가적인 것이다. 그 두가지란 Geometry Transformation과 Polygon Rendering이다. 간단히 말해서 D3D의 교묘한 점 처리와 삼각형 그리기라는 것이다. 물론 저것만으로 모두 설명할 수는 없지만, 저 간단한 것을 마음속에 품는다면 혼란스러운 일은 줄어들 것이다. ... == Vertex데이터의 표현 == 버텍스 데이터를 표현하는 방법은 많이 있고, D3D개발자들은 그들에게 편한 방식으로 접근했다. 어떤 버텍스는 다른 것보다 정보가 더 필요했고 다른 것들은 좀 더 달랐다. 버텍스를 표현 하는 방법을 ''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 }}} === Position === 점이 어디있나를 나타내는 정보이다. {{{~cpp #define CUSTOM_VERTEX_FVF D3DFVF_XYZ struct CustomVertex { float x; float y; float z; }; }}} CUSTOM_VERTEX는 내 버텍스 정보가 어떤 정보들을 담고있나를 지정하는 플래그이고, CustomVertex구조체는 실제 정보를 담는 나만의 구조체이다. === RHW === RHW는 '''동치좌표 W의 역수''' 입니다. 그러면 동치 좌표란 무엇이냐. 이것은 좌표계의 또 다른 점입니다. 이게 있음으로 우리는 4차원 좌표계가 됩니다.(??) 어쨌든 W좌표는 우리가 일하기 편하게 해줍니다.[[BR]] 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형이다.)형을 사용한다. {{{~cpp #define CUSTOM_VERTEX_FVF D3DFVF_XYZ | D3DFVF_RHW | D3DFVF_DIFFUSE struct CustomVertex { float x, y, z; float rhw; D3DCOLOR diffuse; }; }}} === Specular Color === 디퓨즈 컬러 다음에 오는 정보이다. 이것도 D3DCOLOR값이다. 이것은 한 점의 "Shininess"를 알려준다. {{{~cpp #define CUSTOM_VERTEX_FVF D3DFVF_XYZ | D3DFVF_RHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR struct CustomVertex { float x, y, z; float rhw; D3DCOLOR diffuse; D3DCOLOR specular; }; }}} ---- ["2dInDirect3d"]