이전 포스팅에는 하나의 버텍스 버퍼를 가지고, 모든 정보를 담아서 그 것으로 물체를 그리는 방법을 보았다.. 하지만 다이렉트x 에서는 여러가지 정보를 합성하는 방법이 있다. 이번에는 그 차이점만 확인해 보도록 하자...


 변수 선언 부분을 보면, 예전에는 define으로 버텍스 버퍼의 종류를 정했지만, 그런 부분이 없다.. 그리고 선언할 때 어떻게 다른지는 조금있다가 살펴보자.. 그리고 버텍스디클레이션 이라는 변수가 선어되었다. 이 것은 나중에 어떤식으로 버텍스 버퍼를 합칠 것인지 선언해주는 것이다. 
 그리고 아래에 보면 버텍스 정보를 담는 배열이 있다..


그리고 그 아래에는 색을 담는 버퍼,


그 다음은 텍스쳐로 각각 따로 배열을 선언한다.


그 다음 초기화 되는 부분으로 내려오면,


위와 같이 각 버텍스 버퍼를 각각 생성하는 것을 알 수 있다. 그리고 이전에는 3번에 인자에 define 해놓았던 FVF 상수를 넣어줬지만, 현재는 그냥 0이 들어간다..

 아 FVF에 대한 설명이 빠졌는데, FVF란 Flexible Vertex Format 의 약자로, 머 직역하면 유연한 버텍스 포멧 정도의 의미인데, 정확히는 자신이 의도하는 vertext 포멧을 정해서 쓴다는 정도의 의미이다.


 어쨋든 이렇게 컬러도, 텍스쳐 UV 버퍼도 모두 만들면...


버텍스 엘리멘트 배열에 값을 넣는다. 주석처럼, Stream번호 Offset, 그리고 타입 정보를 넣고, 버텍스디클레이션도 생성한다.


F12키로 따라가보면, 여러가지 설정이 있는 것을 확인할 수 있다.


그리고 꼭 해제는 잊지 말고 하기!


랜더에 와보면, 지난번과 달라진 점은 SetTexture이후에 버텍스디클레이션을 셋팅해주고, 지정된 스트림 순서대로 각 버퍼를 넣어준다. 그후에 큐브를 그리면..

 


이렇게 한 큐브에 같은 텍스쳐이지만, 색이 다른 큐브가 만들어진다...
사실 한 버텍스버퍼로도 다 표현되지만, 굳이 왜 이렇게 쓰냐고 의문이 들수도있다. 사실 DirectX는 랜더링용 엔진이라고 볼 수 있다..

 엔진이란 것이 무엇인가.. 바로 밑바닥의 api에서 그 것들을 좀 더 사용하기 좋게, 직관적이게 바꿔 사용하는 입장에서 더 쉽게 쓸 수 있도록 하는 것이다. 그래서 다이렉트x는 어떤 의미에선 실제 엔진들과 기본 api의 중간정도의 위치라고 볼 수 있다.

 간혹, 이런 경우를 생각해볼 수 있다. 랜더링 할 때마다, 색을 바꿔 적용해야하는 경우가 있다고 말이다.. 예를 들면, 리니지에서 독이 걸린상태, 이런 경우, 맵을 하나 더 쓰는 것보단, 그냥 강제로 전체에 한 색을 입혀버리면 더 리소스도 줄이면서 편하지 않을까?

 이렇듯 DirectX에는 이 것이 정답이라는 것이 없다. 그 것을 응용해서 사용하는 사용자의 능력에 달린 것일 뿐.....
Posted by 바람처럼..
|