일단 물체를 Local Space -> World Space로 보내야 함

당연히 W = SRT


이제 World Space -> Camera Space로 보내야 함

Camera Space -> World Space로 보내는 W = SRT의 역행렬을 곱해주면 될 것.

그런데 동일 공간상의 변환이므로 Scale 변환은 의미가 없다. S를 버려주자


이제 Camera Space -> Projection Space로 보내주면 끝난다.

Near Plane과 Projection Window를 동일하게 놓고, height를 2로 두면 width 는 2r (r은 종횡비)


d, r이 있으므로 를 구할 수 있다.

는 r에 의해 결정된다.

(x, y, z)를 projection space로 보내면 (x', y', z')

y에도 똑같이 성립된다.


x', y'를 r로 나눠보자.

따라서

x, y는 선형 변환이 가능하다.

하지만 z는 선형 변환이 안됨(z로 나누어 투영을 처리하기 때문)

따라서 z 나누는 연산을 뒤로 미루고 선형행렬을 구성한다.


Z축 값에는 X, Y값이 없으므로 0 A, B는 무슨 값이 들어갈지 모르므로 상수 A, B를 설정.

나중에 z로 나누기 위해서는 z값이 존재해야 하는데 동차 좌표상의 w값에 이 값을 잠시 복사해 두면 된다.

그래서 3행 4열 성분과 4행 4열 성분을 각각 1과 0으로 설정

최종적으로 구해진 (zx', zy', zz', z)를 w값인 z로 나누면

투영된 z는 depth test를 위해 0~1 사이의 값을 가져야 한다.

이를 위해 구해진 

의  A,B를 구해야 함.

z에 0,1을 각각 대입하여 B에 대해서 풀면

B = -An이 나오고, 이에 따라 풀어내면

아까 구했던 행렬에 집어넣으면

끗!

Posted by RPG만들기XP
,

C++14 코드를 적었더니 갑자기 빌드에 실패했다.

(command line tool에서 cocos build/run 명령어로 빌드 기준)

해결법은 간단하다.

위 사진처럼 proj.android\jni\Application.mk파일의 -std=c++11부분을 -std=c++14로 바꿔주면 끝.



Posted by RPG만들기XP
,
Posted by RPG만들기XP
,