d3dx9 21.10.21

김주현·2021년 10월 21일
0

d3dx9 3D

목록 보기
11/30

왜 뷰스페이스 변환을 하는가?

렌더링 파이프라인을 학습하는건 - 3차원공간상에 3D로 표현되는 모든 정점들을 표현하기위함(3차원에있는 정점들을 2차원으로 바꿔서 보여주자)

3차원 공간에 오브젝트가 있을때 이 공간의 어느 부분을 화면에 보여줘야할까?

모니터에 보여지는 장면은 원점기준으로 보여주는 장면이 아닌 인게임 내에 하나의 시야(카메라)가 보는 장면이다.

어떻게 3차원공간 내의 배치되어있는 정점을 2차원으로 옮길까.

가장 쉬운 방법 z를 소거한다 -> 가까이 있는건은 판별할수없음

정점 x,y를 z값으로 나누자 -> dx에서 택한 원근 표현법

하지만 만약 z가 0이라면? -> z값은 절대 0부터 시작하지않음

니어값이라 하고 0.2, 0.3으로 씀

z좌표에 관통당하고 있는 원과 삼각혀이 있다고 가정하자
(원이 가까이 있고 세모가 멀리있다)

z값으로 x,y를 나눴고 해당값을 찍었다-> 해당값은 매우 작아짐

2차원 영역 -1,1 부터 1,-1 사이의 값만 보인다.

원점을 기준으로 투영하면 카메라 기준이 아니게됨

어떻게 카메라가 바라보는 장면을 만들수 있을까

카메라를 원점으로 만들자(이 위치 변환을 나머지 오브젝트에도 똑같은 적용해준다 바라보는 방향이 정면이 아니라면 변환해준다.)

뷰스페이스 좌표계 -> 카메라 기준의 좌표계이다.

로컬 스페이스점을 월드로 옮기기위해 월드행렬을 곱했음

월드 행렬을 뷰스페이스로 옮기기위해 카메라가 원점으로 가기위한 행렬을 곱할것임

카메라가 항등행렬이었다면 원점에있는 카메라였을거임

그 카메라를 원하는 위치로 옮긴게 카메라의 월드행렬

이 월드행렬의 역행렬을 구하면 이 행렬이 카메라가 원점으로 가기위한 행렬이다.

바라보는 점에서 카메라의 위치를 빼면 룩이된다.

내 좌표계의 y축 벡터를 넘겨주면 카메라의 업과 라이트를 구해줌

먼저하는걸 검지에 맞추고 아닌걸 중지에 맞춘다.(감싸쥐는것도 방법)

룩과 내 좌표계의 y축 벡터 (0,1,0)를 외적하면 라이트가 구해진다.

룩과 라이트를 외적하면 카메라의 없이 구해진다.

이제 카메라의 라 업 룩 포지션을 알았느니

순서대로 넣어주면된다.

카메라의 월드행렬의 역행렬을 구하면 뷰스페이스로 변환해주는 행렬이다.

월드행렬은 객체마다 다르지만
뷰행렬은 다같은 값이다 이를 객체의 RENDER를 호출할때마다 초기화해줄 필요는 없다.

카메라 객체를 따로만들어야하지만 일단 임시로 레벨에서 뷰행렬을 초기화하자

CLevel_Logo -> Tick함수에서 SetTransForm을 해주자

D3DXMatrixLookAtLH(여기다가 결과를 저장해줘,월드 스페이스 상의 카메라의 위치,어떤 점을 바라보고있는지(룩), (0,1,0)업(카메라의 업이 아닌 좌표축의 y축 벡터))

레벨의 장치 private->protected로 변경

카메라는 자기만의 시야 범위를 가지고 있음

오브젝트의 좌표 x,y를 z값으로 나눈값이 -1과 1사이어야 그려짐

x= z일때 1,2사분면의 45도 대각선이 시야에서 왼쪽,오른쪽 사각형

카메라의 시야범위를 줄일수도있음 줄이면 줌인 이됨

카메라의 각도를 원하는대로 수정할 수 있다.

하지만 절대 투영하는 방식을 변경하지는 못함(Z값으로 나누는 것은 변경하지않겠다) 60도로 봤을때로 보이게할려면 객체가 선에 맞게 이동해야한다.

투영 뱐환 행렬은 z나누기를 하기전에 뷰에 맞도록 객체들의 상태를 변환해주는 행렬이다.

x,y 에 1/tan(fan/2)을 곱해준다.

0개의 댓글

관련 채용 정보