목록C (155)
응애맘마조
현재 R키를 눌러서 재장전하는 것까지는 쉽게 하기에 이제 화면 밖으로 나갔을 경우에 자동으로 장전이 되도록 하는 법을 했습니다. 그렇게 하기 위해서는 벡터의 마이너스 합연산을 사용합니다. 두 벡터간의 차이 벡터를 만들 때 사용합니다. 하지만 벡터간의 사이에서 마이너스 벡터 값은 없습니다. 만약 벡터 간의 빼기를 하고 싶을 때는 (벡터) + -(벡터) 공식으로 계산합니다. 벡터간의 빼기는 차합이라고 합니다. 방법은 기준 객체를 원점으로 맞추고 기준 객체의 좌표 벡터를 빼면 됩니다. 그 사이에 나온 값을 거리라고 하는데 distance라고 쓰고 코드상에는 dis라고 표기하였습니다. 읽어주셔서 감사합니다.
어제 말했던대로 오늘 DirectX를 나가기 전 Framework를 받았습니다. sln 파일을 열면 2DFrameWork가 있고 Game1, 2가 있습니다. 하지만 이대로 실행하면 오류가 납니다. 왜냐하면 시작 프로젝트가 2DFrameWork로 되어있기 때문입니다. Game1, 2로 시작 프로젝트를 해야 정상적으로 실행이 됩니다. 여기서 2DFrameWork는 정적 라이브러리(lib)파일이고 Game1, 2는 응용 프로그램(exe)파일입니다. 정적 라이브러리를 작성하고 빌드된 것을 가져가서 사용합니다. 여기서 컴파일을 할 때 한 번 했던 컴파일 된 파일은 또 다시 하지 않습니다. 수정된 코드가 있는 파일만 다시 합니다. 하지만 만약에 프레임워크를 수정하면 다시 처음부터 컴파일을 시작합니다. (프레임워크를..
행렬의 마지막으로 동차를 했습니다. 동차는 W로 표기하며 한자로는 同次라고 합니다. 차원의 차이를 나타내며 값은 0, 1로 표현합니다. SetWorldPos는 W가 1입니다. 원점에서 나오기 때문에 같은 차원이라서 1이라고 표현합니다. MoveWorldPos는 W가 0입니다. 특정 위치에서 움직이기 때문에 같은 차원이 아닙니다. 중점을 이동시켜서 구현합니다. 그렇기 때문에 정점이 이동하는 것이 아닙니다. 내일부터 DirectX 2D를 들어가기 전에 Framework 파일을 주고 들어 가기 전 게임 기능에 대해 배우고 정식으로 들어간다고 합니다. 그 전에 이제 미사일 발사 하는 기능에 대해서 한다고 했습니다. 그 이후에 정식으로 DirectX2D를 나간다고 합니다. 읽어주셔서 감사합니다.
GameObject.h의 파일이 조금 수정되었습니다. 중요한 부분은 private와 protected로 바뀌었습니다. static void CreateStaticMember과 static void DeleteStaticMember는 static 함수인데 프로그램이 실행될 때 딱 한 번 실행됩니다. 앞으로 로컬 포지션과 월드 포지션을 사용합니다. LocalPos, WorldPos 이름의 함수로 사용합니다. 이동 시킬 때는 +=을 사용합니다. 이때 포지션 이름은 MoveLocalPos, MoveWorldPos입니다. 위치를 고정 시킬 때는 =을 사용합니다. 이때 포지션 이름은 SetLocalPos, SetWorldPos입니다. 이 상황에서 만약 부모 객체가 있다면 정규화와 Invert(역행렬)을 곱해서 부모..
이번엔 SRT 부분에서 RT 부분을 주로 하였습니다. RT는 R × T로 회전과 이동을 동시에 가지는 행렬입니다. 표현하게 되면 cθ sθ 0 0 -sθ cθ 0 0 0 0 1 0 Tx Ty Tz 1 이렇게 표현할 수 있습니다. 함수 중에 asinf, acosf, atanf가 있습니다. 여기서 a는 역삼각 함수입니다. (크게 중요하지는 않습니다.) 벡터를 사용하면서 각도를 사용하여 벡터를 알 수 있었는데 그럼 반대로 벡터를 사용하여 각도를 알아낼 수 있습니다. 모든 객체의 포지션 또한 똑같지는 않습니다. 여기서 오늘 중요한 Parents를 했습니다. 사전적 의미로는 '가족'이라는 의미를 가지고 있지만 프로그래밍에서는 부모 객체가 있으면 자녀 객체를 생성하여 SRT × RT로 계산하는 식으로 되었습니다. ..