일단 물체를 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
,

이하 내용은 Visual Studio 2015에서 

DirectX 11을 이용한 3D 게임 프로그래밍 입문(http://www.d3dcoder.net/d3d11.htm)

책의 예제를 실행하기 위한 셋팅에 대한 설명이다.



effects 프로젝트를 많이 수정해서 빌드하고, common 폴더 내용들도 많이 수정해줘야 하는데

과정이 간단하지가 않아서 제가 셋팅해놓은 상태 그대로 올립니다.

대신, dxerr.h는 라이브러리에 있는 것을 그대로 쓰시면 안되고 제가 수정해 놓은 파일을 쓰셔야 하기 때문에, 

#include 로 되어있는 부분은 #include "dxerr.h"로 바꿔주시고, 프로젝트 설정에 추가 라이브러리에서 dxerr.h를 추가해둔걸 다시 지워주셔야 합니다.

그리고 Common 폴더 안의 제가 넣어둔 dxerr.h를 프로젝트에 추가해주시면 됩니다.


Common.zip

ㄴ 다운로드

Posted by RPG만들기XP
,


pch.cpp, pch.h를 만든 다.

pch.h에 precomplie 할 헤더를 인클루드 한다.

pch.cpp에 #include "pch.h" 딱 한줄만 입력한다.


프로젝트 설정에 C/C++ - Precompiled Headers로 들어간다.

설정을 Use로 바꾸고, pch.h를 추가한다.


pch.cpp파일에서는 Create로 셋팅해준다.


기존 cpp파일의 최상단에 모두 pch.h를 include한다.

pch.h include로 인해 필요 없어진 include문을 모두 제거한다.


그리고 리빌드하면 끝.

앞으로는 클래스 생성할 때마다 pch.h는 자동으로 include 해준다.

Posted by RPG만들기XP
,

Visual Leak Detector라는 라이브러리를 사용하는데, 따로 설치하지 않더라도 Visual Studio에서 지원하는 NuGet을 이용해서 프로젝트에 포함시킬 수 있다.

어떻게 하냐면 : 


NuGet 매니저에 들어가서

설치한다.

원하는 프로젝트 속성에 들어가서

PATH=%PATH%;$(ProjectDir)\packages\VisualLeakDetector.2.5.0.0\lib\native\address-model-32\lib

$(LocalDebuggerEnvironment)

위 구문을 추가.(64비트 안쓰기 때문에 32비트만 추가했다.)

VC++ Directories에서 Include Directories에 $(MSBuildProjectDirectory)\packages\VisualLeakDetector.2.5.0.0\lib\native\include 를 추가

Library Directories에 $(MSBuildProjectDirectory)\packages\VisualLeakDetector.2.5.0.0\lib\native\address-model-32\lib 를 추가

(위 스크린샷에서는 절대경로로 되어있는데, 절대경로로 해놓으면 프로젝트 폴더를 옮기거나 여러명이서 작업하거나 등등 상황에서 못 찾는다. 매크로를 써서 상대경로로 지정해주자.)

그리고 메인함수 쪽에서 #include <vld.h> 하면 (#ifdef _DEBUG 구문은 당연히 넣어야겠다.)

메모리가 새는게 있으면 바로 보여주고, 더블클릭하면 새는 부분 코드까지 찾아준다.

Posted by RPG만들기XP
,