카메라를 만들기전 기존의 만든 트랜스폼 클래스에대한 처리를 해줌
엔진의 트랜스폼 클래스
객체의 월드공간상에서의 상태를 표현한다.
1행 : 라이트, 2행 : 업 , 3행 : 룩 ,4행 : 포지션
(월드공간으로의 변환, 월드공간에서의 상태를 표현)
월드 객체를 각 객체의 선언해도되지만 이동같은 함수를 각각 구현하기보다는 트랜스폼 컴포넌트로 빼서 객체화하는것이 효율적이다.
생성될때 tagTransformDesc에 상태값들을 정해주자
{
초당 얼마나 움직이는지
초당 얼마나 회전하는지
}
이를 멤버변수로 보관하자.
TRANFORMDESC m_TrnaseFormDesc
이를 NativeConstruct(원현 객체가아닌 복제를 할때) 초기화해주자
타임델타는 매프레임마다 갱신되는값이니깐 보관하지 않는다.
인터페이스를 추가 구현하자.
void Go_Straight(_float fTimeDelta); // 전진
바라보고 있는 방향으로 전진한다.
void Back_Straight(); // 후진
void Walk_Left();
void Walk_Right();
void Ratation_Axis(); //회전
void Chase_Target(const CTransform* pTargetTransform); // 추적
타겟을 바라보는 벡터를 구하자
타겟을 바라보는 벡터를 구할수있다. 정규화한후 더해주고 월드좌표에 적용해준다.
void Set_Scale(_float fScaleX, _float3 fScaleY, _float3 fScaleZ ) // 크기 변환을 세팅한다.
R,L,U를 선언하고
각인자의 Get_State값을 넣어주고
Set_State 노말라이즈해서 * fScale 해줌
void Set_State(STATE eState, _float3 vState)
// 행렬의 각 행에다가 원하는 벡터를 넣어준다.
위 함수에 사용하기위한 열거체 구현
public:
enum STATE {STATE_RIGHT,STATE_UP,STATE_LOOK...};
_float3 Get_State(STATE eState) const {
return &m_WorldMatrix.m[eState][0];
}
// 특정행의 가장 첫번째 주소를 던져줌(데이터가 연속적이기 때문)
02 . 움직이는거구현
일단 백그라운드의 tick 수정 해주고
백그라운드의 Add_Component 에서 값을 초기화해주자
지금 아규먼트를 주지 않고있다 게임오브젝트의 애드 컴포넌트할때 아규먼트를 넣어주도록 수정해주자.
픽메시지 부분 수정
03 . 회전 구현
SetUp_Rotation은 정적인 회전(축으로,이각도만큼회전) //시간이 필요없음
//처음 초기화할때 어떤 상태를 가져라
Rotation_Axis(축,시간) 축을 기준으로 초기에 넣어준 Desc값으로 회전하라.
라업룩 세벡터는 모두 직교한다 -> 라업룩 세벅터를 모두 받아온 각도만큼 회전시켜야한다.
현재 내객체에 회전 행렬을 적용하는것이 아닌 회전되지않은 기본벡터에 회전행렬을 적용한 값을 넣어 준다.
라업룩에는 현재 객체의 스케일이 들어가있음 이를 무시하고 1로 만들면안됨
{
Get_Scale 함수 구현하자
D3DVec3Length( 각 라업룩을 넣어주자)
이렇게 얻은 세 벡터의 길이를 벡터로 만들어서 리턴해주자)
}
벡터 라업룩을 선언하고
각 초기값으로 초기화한 세 라업룩 벡터를 겟_스케일로 얻어온 스케일값으로 각각 곱해주자.
방향벡터를 회전한다 = 위치벡터를 이동시킨다.
D3DXMatrixRotationX로 X축을 회전시킨다.
D3DXMatrixRotationAxis는 세축을 모두 회전시킨다.
D3DXMatrixRotation(매트릭스를하나 선언해서 넣어주고,축,각도)
normal은 끝값을 0으로 줌 -> 위치값을 무시한다.
Coord는 끝값을 1로줌 -> 위치값을 받음
방향벡터는 위치값을 가지지않는다(어디있든 똑같다) 오로지 길이와 어디를 바라보고있는지만으로 비교한다.
D3dXvecTransformNormal(라이트,라이트,회전행렬)을 Set_State에 인자로 넣어주자
-Rotation_Axis()
라업룩 벡터를 모두 얻어오고
회전행렬을 구하는 부분에서 각도가 아닌 (회전값 * 시간) 을 넣어주자
나머진 위 함수와 같다.