모델뷰변환 과

원근변환 까지 거치고 나면

바로 CVV라는 세축 모두 -1 ~ 1  범위에 있는

정규화된 공간이 생깁니다.


실제로 출력될 공간의 좌표들인데  

저 범위 안에 없으면 culling 을 하거나

폴리곤의 경우 clipping을 하기도 합니다만

우선 넘어가죠


이렇게 정규화된 좌표를 이제는

실제 출력하고자 하는 창의 크기에 맞추어 확대를 시켜 

주는 놈이 뷰포트 변환입니다. 매우 간단하죠

width , height 만큼 배율을 곱하고 영점을 화면의 가운데로 옮겨주면 되겠죠

Mat4에 해당 내용을 추가합니다.

 

그럼 지금까지 각 변환을 살펴봤는데요

엄청 답답할 겁니다. 뭔가 출력이 되가면서 봐야 성취감이 들텐데

뭔가 사전작업이 너무 많잖아요.. 원래 이런거인듯합니다.

디버깅도 힘들고,,, 잘 생각해서 구현해야되져



그래도 대략 재료(?) 들이 많이 모였습니다. 

그러면 실제로 3D 처럼 보이는지 아닌지 한번 출력을 해봅시다.




대략 상상도? 입니다.

바닥에 일정한 간격으로 똑같은 너비의 직선을 그릴것입니다. ( 두 점을 생성)

카메라는 (0,5,-3) 위치로 이동한뒤 

(0,2,0) 지점을 바라볼 것입니다. 즉 약간 내리깔아 쳐다보겠죠


이제 바닥에 있는 선들이 3d로 제대로 보이느냐 하는 실험입니다.

이제

html 의 스크립트 안에다가 다음과 같이 만들었습니다.

좀 복잡해서 주석을 막 달아놨습니다.


 

지금은 점의 좌표가 z 값만 체크해서 culling을 하는데요

이유는 나중에 말씀드리고 결과를 보여드리겠스빈당

 

오오 드디어 3d 다운게 보이네요 ㅎㅎ

좌표는 저런식으로 순서대로 변환하면 되는데요

culling 이나 clipping 을 저렇게 대충한 이유는

그리려는 3차원 객체의 속성에 따라 컬링이나 클리핑을

어떻게 해야할지 다 달라지기 때문입니다.

그냥 파티클이면 , 범위 체크해서 컬링만 해도 상관없는데

폴리곤의 경우 , 클리핑도 해야할 경우도 있고

앞면 , 후면 있는 경우 후면도 날려버리기도 하고 ..


종류에 따라서 매우 달라지기 때문입니디



좌표 변환은 다 되었습니다.

지금부터는 이제 좀 창의적인 면이 필요합니다.

솔찍히 지금까지는 그냥 이론대로 구현만 하면 되는데


고작 저거 선긋는거 하나 출력할려고

저렇게 많은 작업을 해야한다는것이 말이 안되죠

좀더 간편하게 만들수 있도록 저 과정을 자동화 해야할겁니다.


여기서부터 이제 완전히 제 멋대로 작성하게 됩니다.



 
Posted by 멍충한아싸

댓글을 달아 주세요

  1. 잘 보고 갑니다. 그런데 가장 첫문단의 CVV라는 용어는 처음 듣는데요. 보통 NDC 공간이라고 하지 않나요 ^^;;

    2013.03.13 16:31 신고 [ ADDR : EDIT/ DEL : REPLY ]