프로그래밍 2016.10.21 00:40

 

지금까지, 대충만 이해하고 사용했었는데,

 

요 블러그에서

잘 설명해 주셨네요

 

http://liepooh.egloos.com/521832

 

 

밑의 버텍스 쉐이더 코드에서,

정점이 모든 변환 매트릭스(월드, 뷰, 프로젝션) 에 대해 계산되었다면,

이 정점은 -1~1 범위의 프로젝션 범위안의 값일까?

 

헷갈려서, 여러 자료를 살펴보다가

내 이해대로 정리를 좀 해본다

 

 

VS()

{

 Out.pos = mul( float4( _In.pos, 1.f ), _matWorld );
 Out.pos = mul( Out.pos, _matView );
 Out.pos = mul( Out.pos, _matProj );

 

 자, 지금 Out.pos 값은 -1~1 범위의 값일까?

}

 

...

...

...

 

답은

-> 카메라공간상에서의 값이다, -1~1 범위가 아니다,

-> 정규화되지 않은 값이므로,

-> 카메라와의 거리에 따라 아주 크거나, 아주 작은 소수값일수도 있다 

-> (월드좌표상의 값...)

-> w 값에 카메라와의 거리값이 들어있다

 

 

나는 일단, 위 코드안에서

프로젝션 변환까지 마쳤으면, 값이 -1~1 범위 일꺼라 생각하고 있었는데,

(프로젝션 좌표계의 영역이 -1 ~ 1 이니까, 당연히)

잘못된 생각이었다,

 

-> 실제 정점과 프로젝션 매트릭스를 곱해보니, 통상의 월드값이 나온다

-> 정점 * 매트릭스인데 , z값으로 나누고 하는 과정이 있을리 없다!

-> 제기랄 

-> 프로젝션의 좌표계 변환은 위코드에서 수행되는 것이 아니다

-> 버텍스 쉐이더의 파이프라인의 한과정이다 

 

생각은 이렇게 하면서도,

그림자 구현이나, 깊이버퍼 구현에서 depth 이용시에는

다시 w 값으로 나누어 -1~1 영역의 값으로 만들어 주어야 하니,

뭔가 좀 아리까리한 상태였다

 

위 코드안에서는 월드값이고,

픽셀 쉐이더로 넘어가기 바로 전에,

 

device 에 의해,

자동으로 근거리, 원거리에 대하여 잘라주고,

(근거리, 원거리 값은 D3DXMatrixPerspectiveFovLH 등으로 값을 넘겨 받는 것)

 

자동으로 버텍스값(x,y,z,w)은 w 값으로 나누어지고,

자동으로 스크린좌표에 매칭시킨후에

픽셀쉐이더로 넘겨진다 가 맞는 진행인것 같다

-> 이 과정은 우리가 코드로는 확인할수 없는 영역이다 

 

 

버텍스를 스크린좌표로 자동으로 변환시키기 위해서는

device 가 화면의 width, height 를 알고 있어야 하는데,

우리는 이미, dx 창을 만들때나, 코드에서 SetViewport 함수를 통해서 알려주었다

 

 

맞나, 이것도??

코드로 테스트를 좀 해보아야겠다,,,

 

 

 

저작자 표시 비영리 변경 금지
신고
posted by 게임스타 죠운죠운

댓글을 달아 주세요


티스토리 툴바