지금까지의 예제들은 간단해서 다 옮겨 썻지만, 이제 각 부분의 역할들만 간단히 알아보자...

 이제 다이렉트X에 대해서 기본적인 셋팅에 대한 부분에 대해 알았다면, 이제 간단한 Geometry들을 그려보자...

 그러기 위해서는 과연 화면에 어떻게 어떤 물체가 뜨는지를 생각해 보자...

 3D 공간에서 가장 기본이 되는 단위는 점. 버텍스이다. 그 버텍스 3개가 모인 삼각형, 즉 폴리곤이 되고, 그 폴리곤들이 모이면.. 하나의 오브젝트가 된다고 전에도 말했다..

 그래서 이 예제는 그 점들이 어떻게 찍히느냐.. 각 속성에 따라 어떻게 보이는 것이 다르냐에 대해 알 수 있는 예제이다... 

 


예전 프로젝트에 설정은 그대로이므로, 소스만 복사해서 넣으면된다..
(물론, 윈도우 프로젝트로 설정되어 미리 컴파일된 헤더라던지 하는 좀 복잡한 문제가 있기 때문에.. 조금 신경써줄 곳이 있긴 하다. )

먼져 실행을 시켜보면...


이런 화면들이 나온다.. (각 장면의 전환은 F1 키를 누르면된다.)

자 그렇다면 이 것들이 왜 이렇게 나왔는지에 대해서 알아보자..

간단히 버텍스를 선언하는 곳을 보자..


상단에 선언부분을 보면.. 각 버텍스 부분에 대한 전역 변수들이 있다..

그리고 그 아래에 define으로 VERTEX의 속성에 대해서 정해놓고,

구조체를 만들었다.. 이 것은 무엇이냐 하면, 앞으로 사용될 버텍스가 가질 정보를 저장하기 위해서 인데, 현재는 XYZ와 디퓨즈 칼라값을 가지겠다는 의미이다.. (이 정보에 대해서 아는 것이 중요하다. 이 것이 나중에 셰이더 와도 상관이 있다. )


그리고 더 아래로 내려오면 각 버텍스 내용을 가지는 포인터가 있다...

저 각 좌표의 의미가 무엇인고하니.. 각 버텍스의 좌표이다. 그리고 아까 XYZ와 칼라값을 넣겠다고 했으니, 뒤에 칼라를 넣어준다. 유심히 보면 알겠지만, point나 line이나 Strip이나.. 다른 점이 없다.. 바로.. 3개의 좌표와 칼라값만 있을 뿐이다..

 그렇다면, 무엇이 이 것들을 다른 방식으로 랜더링을 하게 하는가 가.. 바로 오늘 프리미티브 타입의 핵심이다.. 

 


 일단 내용은 좀 있다가 보고, 선언 한 배열을 설정하는 부분을 보자...

 모든 프로그래밍이 그렇겠지만, 일단 무언가를 하고 싶으면, 그 것에 관한 메모리가 있어야한다.. 이것이 프로그래밍의 기본이다..

 그래서 디바이스를 이용하여, 버텍스 버퍼를 만든다.. 저기 있는 size는 각 배열에 선언한 숫자를 넣고, 나머지는 그대로 넣으면된다. 그리고 저 기 D3DPOOL_DEFAULT라고 넣었는데 이 것은 메모리 관리 방법을 설정하는 것이다. 디폴트라고 넣게 되면, 이 것에 관한 관리를 직접 해주어야한다. 하지만 D3DPOOL_MANAGED를 넣게되면, 다이렉트x가 직접 관리를 해준다. 2가지다 장단점이 있으니 맞는 것을 선택하면된다..


 그럼 다시 타입 정하는 곳을 보려면, 키입력 콜백함수 부분으로 간다.. 그러면 F1이 눌러졌을 때 현재의 상태값을 다른 상태값이로 바꾸는 부분이 있다.

 


그리고 랜더에 가보면, 각 프리미티브 상태값에 따라서 다른 case로 들어가는 것을 확인할 수 있다. 그리고 DrawPrimitive함수를 통하여 어떻게 그릴지 결정하여 화면에 그리는 것이다..

저기 숫자가 바로 그릴 버텍스 점의 갯수 이니, 저 것을 하나씩 조정해봐도 재미있을 것이다. 그리고 다른 기능으로 F2를 누르면...


이런 부분이 있는데, 와이어 프레임으로 화면을 볼 것인지, 꽉 찬 상태로 볼 것인지 정할 수도 있다.. 만약 와이어 프레임으로 보는 상태이면...


이런 화면을 볼 수 있다. 이 것이 아까 봤던 마름모의 와이어 프레임이다..

자.. 그렇다면 이제 대충 감이 좀 잡히는가?

 점들은 그냥 하나의 점이지만, 어떻게 그릴꺼냐를 결정하는 것에 따라 다른 결과를 가져온다. 그리고 그리는 순서도 중요하다.. 

 삼각형의 3점이라고 어디서 부터 그리든 상관없는 것이 아니다. 그리는 점의 순서에 따라 이 삼각형의 앞면일 수도, 뒷 면일수도 있기 때문에, 화면에 그려질 수도 안그려 질수도 있는 것이다.
 (왜 안그려지는 지는 이전 포스팅 랜더링 파이프라인에서....)

물론, 실제로 게임 개발에서는 모델링을 바로 로드해서 사용하기 때문에 이런 것까지 알 필요는 없을 수도 있다. 하지만, 동작원리를 모르고 모델링을 쓴다고 하면, 나중에 정해진 포멧이 아닌 약간의 변형을 주어야 할 때 어디서 부터 손을 데야 할 지 감이 안 올 수도 있다. 
 그래서 기초가 중요한 것이다. 그럼 다음 포스팅에서 버텍스 데이터에 대해서 더 알아보도록 하자...
 
Posted by 바람처럼..
|