모델뷰변환 과
원근변환 까지 거치고 나면
바로 CVV라는 세축 모두 -1 ~ 1 범위에 있는
정규화된 공간이 생깁니다.
실제로 출력될 공간의 좌표들인데
저 범위 안에 없으면 culling 을 하거나
폴리곤의 경우 clipping을 하기도 합니다만
우선 넘어가죠
이렇게 정규화된 좌표를 이제는
실제 출력하고자 하는 창의 크기에 맞추어 확대를 시켜
주는 놈이 뷰포트 변환입니다. 매우 간단하죠
width , height 만큼 배율을 곱하고 영점을 화면의 가운데로 옮겨주면 되겠죠
Mat4에 해당 내용을 추가합니다.
그럼 지금까지 각 변환을 살펴봤는데요
엄청 답답할 겁니다. 뭔가 출력이 되가면서 봐야 성취감이 들텐데
뭔가 사전작업이 너무 많잖아요.. 원래 이런거인듯합니다.
디버깅도 힘들고,,, 잘 생각해서 구현해야되져
그래도 대략 재료(?) 들이 많이 모였습니다.
그러면 실제로 3D 처럼 보이는지 아닌지 한번 출력을 해봅시다.
대략 상상도? 입니다.
바닥에 일정한 간격으로 똑같은 너비의 직선을 그릴것입니다. ( 두 점을 생성)
카메라는 (0,5,-3) 위치로 이동한뒤
(0,2,0) 지점을 바라볼 것입니다. 즉 약간 내리깔아 쳐다보겠죠
이제 바닥에 있는 선들이 3d로 제대로 보이느냐 하는 실험입니다.
이제
html 의 스크립트 안에다가 다음과 같이 만들었습니다.
좀 복잡해서 주석을 막 달아놨습니다.
지금은 점의 좌표가 z 값만 체크해서 culling을 하는데요
이유는 나중에 말씀드리고 결과를 보여드리겠스빈당
오오 드디어 3d 다운게 보이네요 ㅎㅎ
좌표는 저런식으로 순서대로 변환하면 되는데요
culling 이나 clipping 을 저렇게 대충한 이유는
그리려는 3차원 객체의 속성에 따라 컬링이나 클리핑을
어떻게 해야할지 다 달라지기 때문입니다.
그냥 파티클이면 , 범위 체크해서 컬링만 해도 상관없는데
폴리곤의 경우 , 클리핑도 해야할 경우도 있고
앞면 , 후면 있는 경우 후면도 날려버리기도 하고 ..
종류에 따라서 매우 달라지기 때문입니디
좌표 변환은 다 되었습니다.
지금부터는 이제 좀 창의적인 면이 필요합니다.
솔찍히 지금까지는 그냥 이론대로 구현만 하면 되는데
고작 저거 선긋는거 하나 출력할려고
저렇게 많은 작업을 해야한다는것이 말이 안되죠
좀더 간편하게 만들수 있도록 저 과정을 자동화 해야할겁니다.
여기서부터 이제 완전히 제 멋대로 작성하게 됩니다.
'프로젝트 > 초간단3d엔진 2011' 카테고리의 다른 글
10. 파티클과 첫번째 프로그램 (0) | 2011.12.29 |
---|---|
9. 행렬스택, 장면 그리고 렌더러 (1) | 2011.12.29 |
8. 뷰포트 변환과 간단한 그리기 테스트 (1) | 2011.12.29 |
7. Camera (0) | 2011.12.29 |
6. Orthogonal Matrix와 로컬좌표계, 월드좌표계 (0) | 2011.12.29 |
5. Matrix 4 by 4와 Vector 4 만들기 (0) | 2011.12.29 |
댓글을 달아 주세요
잘 보고 갑니다. 그런데 가장 첫문단의 CVV라는 용어는 처음 듣는데요. 보통 NDC 공간이라고 하지 않나요 ^^;;
2013.03.13 16:31 신고 [ ADDR : EDIT/ DEL : REPLY ]