수학관련 라이브러리가 어느정도 모습을 갖추었으면, 이제 최초로 뭔가 돌아가는 것을 만들어 볼때입니다.. 일단은 최소한의 초기화와 실행 절차를 갖춘 프로그램을 만들어 놓도록 합니다. 화면에 무언가를 그리는 함수 같은 것은 쉽게 바꿔치기 할 수 있도록 해 놓는 것이 좋을 것입니다. 이런 뼈대 라이브러리의 형태에 대해 참조하실려면
OpenGL 관련 라이브러리중 하나인 glut 를 참조하심이 좋을 듯..
이 단계까지는 화면에 그리는 내용이 직접 노가다 코딩으로 그릴 수 있는 간단한 큐브정도로 한정되어 있을 것입니다. 뭔가 좀 더 폼나는 것을 그리려면 맥스같은 외부툴에서 데이타를 가져와야 합니다
일단 맛뵈기만 하려면 ASC 포맷을, 좀 더 제대로 된 데이타를 가져오려면 ASE 포맷을 읽는 부분을 만들어야 할 것입니다.
이 시점에서 여러가지 해결해야 할 사항이 생기는데, 첫째로는 파일 포맷에 대해서 정확히 이해하고, 각 항목이 어떤 역할을 하는 것인지를 알아야 하겠으며, 둘째로는 비교적 여러단계로 복잡하게 구성되어 있는 3D Scene Data 를 효율적으로 정렬하기 위한 자료구조를 내 프로그램에 심는 것입니다. STL 같은 라이브러리를 능숙하게 사용할 수 있다면 많은 도움이 될 것입니다. 가급적이면 계층적으로 구성된 모델을 읽을 수 있도록 해야 나중에 애니메이션도 해보고 할 수 있겠죠. 세째로는 기본 이상의 가속기에 대한 조작을 할 수 있도록 d3d_renderstate 들에 대해서 알아두는 것입니다. 최소한 바이리니어 필터링을 켜고 끄고, 텍스춰 매핑을 켜고 끄고, 알파블렌딩, 등등을 맘먹은대로 조합해볼 수 있어야겠죠
만약 지금까지 험난한 길을 거쳐서 화면상에 맥스에서 그린 오리를 읽어서 출력할 수 있다면 이제 기본적인 코스는 마스터했다고 볼 수 있을 것입니다.
(몇가지 설명을 빼먹은 것이 있군요. 각종 좌표계 (모델좌표계, 월드좌표계, 카메라 좌표계, 스크린 좌표계) 들간의 변환에 대한 의미와 프로젝션에 대한 이해, 그리고 그에 따라 최소한의 벡터와 행렬 연산만으로 화면상에 그림이 그려질 수 있도록 하는 그래픽스 파이프라인의 설계가 필요하죠)
그래도 옛날보다는 훨씬 일이 쉬운 것이, 화면에 텍스춰매핑된 삼각형을 그려주는 부분인 Rasterization 관련 부분은 가속기가 모두 알아서 처리해 주기 때문이죠. 옛날에는 어떻게 하면 어셈블리로 최적화를 해서 화면에 그림을 빨리 찍느냐를 궁리하느라 사람들이 시간을 많이 보냈지만.. 요즘은 그런 일에 별로 신경을 쓰지 않고 다른 쪽.. (물리학이나 자료구조 최적화) 에
시간을 투자하는 추세죠.. (결국 앞에 할 일은 줄어들은 대신, 뒤에 할일 이 많아졌다는 뜻)
일단 엔진이 완성되고 나면 그 이후에는 자신의 필요에 따라서 할 일이 달라지겠지만, 최소한 3차원상에 마우스로 물체를 배치하는 에디터정도는 꼭 만들어보시기 바랍니다. 어느정도 기능을 갖춘 에디터까지 자기손으로 만들어보고 나면 어느정도 이젠 뭐라도 만들 수 있다는 자신감이 생길겁니다..
이상 초보자분들께 도움이 되셨길 바라며..
학규(neolith)
- asc 포멧이라 함은 구석기 시대..에 쓰던 맥스의 포멧인데요.. --ㅋ 맥스에서 디자이너가 모델링을 하면 그 결과를 스크립트로.. 그러니까 텍스트 파일로 바꾼.. 포멧이라 합니다.
- ase 는 좀더 나중에 나온 거구요.. asc처럼 텍스트로 뽑는건데 더 많은 정보를 제공해줍니다.
- 이것들 이외에도 모델링 데이타를 가져오기 위한 포멧이 여럿 있습니다. x나 3ds등도 쓰입니다. 3ds의 경우 버텍스 모핑 키값을 쓸수 있다 하는데 실효성은 의문입니다. 그리고 그넘은 binary로 되있어서 읽을때 조금 더손이 갈 듯합니다.
- 파일 포멧에 관한 자료는 나우누리 게제동에 심심강좌.. 인가.. 거기하구 책으로는 3d file format이라는 책이 있는데.. addison wesley 에서 나온건가.. --; 있습니다. 여러군대에서 찾으실수 있을듯 합니다.
- STL 은 standard template library 입니다.
- 최근에는 rasterinzing (transform, lighiting 이 끝나고 난후 화면 주사선에 맞추어서 찍어주는 부분.. 일꺼에여)이외에 trasform과 lighiting도 가속기로 처리할 수 있다고 합니다.
- 가속기 관련 라입과 3D이론서 를 같이 공부하실 것을 추천합니다. 이론서를 보기전에 선형대수학 .. 적어도 2장인가.. 역행렬 까지는 보실것을 추천..