2008/07/07 17:58

[D3DX] 서브셋의 개념

하나의 메쉬에는 여러개의 서브셋이 존재할 수 있다.
서브셋이라는 개념이 필요한 이유가뭘까?
집이라는 오브젝트가 있다고해보자. 이 집은 지붕, 창문, 벽 으로 이루어져있다. 그런데 지붕, 창문, 벽의 재질이 모두 동일할까?  동일하지않다. 그래서 서브셋이라는 개념이 존재하는것이다. 집이라는 메쉬하나를 3개의 서브셋으로 분리해야만 각각의 메터리얼(재질)을 분리하여 적용할수있게된다.

텍스쳐를 적용할때도 마찬가지이다. 텍스쳐도 사실 개념적으로 메터리얼이기때문에 다이렉트X 에서
다음과같은 구조체를 만들어놓은거라고 생각한다.

D3DXMATERIAL

이 구조체를 까보면

두개의 속성이 있다

MatD3D : D3DMATERIAL9 구조체와 동일한 구조를 가진 구조체이다.
              Ambient, Diffuse, Specular, Emissive, Power 의 속성을 가졌다.

pTextureFileName : 문자열이며 텍스쳐 이미지의 파일명을 나타낸다.

x파일(맥스에서 작업한)을 읽어올때 D3DXMATERIAL 타입의 배열을 받아올수있는데,(매터리얼 버퍼라고 한다)
이 배열의 길이만큼 for문을 돌려서 메쉬를 그리면 된다.

코드로 간략하게 나타내보자.

D3DXMATERIAL materials[3]; //길이 3의 메터리얼 버퍼가 존재한다고 가정.

for(int i=0;i<3;i++){
      device -> SetMaterial(materials[i].MatD3D);
      // materials[i].pTextureFileName 을 참조하여 텍스쳐 객체(ID3DXTexture 였나?) 생성
     device -> SetTexture(....);
     mesh -> DrawSubset(i);
}

이 모든 설명을 2줄로 요약하면..

메터리얼과 서브셋은 1:1 대응관계이다.
즉, 메터리얼 1개에 대응되는 서브셋은 1개 !!! , 서브셋 1개에 대응되는 메터리얼도 1개 !!!

이올린에 북마크하기(0) 이올린에 추천하기(0)
Trackback 0 Comment 0