카메라의 이동
카메라프리의 부모 카메라는 게임오브젝트를 상속받아 생성되었다.
게임오브젝트는 컴포넌트를 보유할수있게 만들었음으로 트랜스폼 컴포넌트를 보유하게 해주자
이때 카메라의 DESC와 트랜스폼이 같은 기능을 가지니 동기화되도록 만들어주자.
컴포넌트를 추가해주기위해 Add_Coponents()함수를 구현해주자.
카메라프리의 네이티브컨스트럭트에서 Add_Components를 추가해주자.
멤버변수 m_pTransform에 트랜스폼 클래스를 복제해서 넣어주자
트랜스폼객체에 전달해줄 정보인 TramsformDesc를 선언해서 넘겨주자.
카메라의 셋_트랜스폼 함수에서 뷰매트릭스는 사실상 카메라의 월드스페이스 변환행렬의 역행렬이다.
트랜스폼 컴포넌트에서 역행렬을 반환해주는 함수를 구현하자
Get_WorldMatrixInverse();
뷰변환행렬을 건네주는 셋_트랜스폼함수의 인자로 위에서 만든함수를 인자로 넘겨주자.
카메라의 셋트랜스폼 함수에서 desc와 트랜스폼 컴포넌트를 동기화해주자.
포지션 -> 아이
룩-> 앳 - 아이의 정규화한 벡터( 카메라는 스케일을 가지지않는다.)
라이트 룩과 y축을 외적
업 룩과 라이트를 외적
네이티브컨스트럭트에서 라업룩 포지션을 받아서 수행해주자.
처음 동기화가됨
반복
{
틱에서 움직임을통해 카메라값이 변경됨
변경후 셋트랜스폼함수가 호출되서 트랜스폼값의 역행렬을 뷰매트릭스로 변경해줌
}
다이렉트 인풋
키보드와 마우스 입력을 처리하는 클래스
장점 - 다양한 입력장치 초기화가능
- 키보드는 별차이없지만 마우스에서 입력처리 편함
엔진 - 시스템 -인풋 필터에 인풋디바이스 클래스를 생성하자.
우선 키보드와 마우스를 초기화하는 과정이 필요함
Engine_Defines에 dinput헤더를 추가해주자
dinput8 라이브러리 추가해주자.(링커 입력 추가종속성)
dxguid 라이브러리도 추가해주자.
워닝을 없애기위해 dinput헤더 추가전에 다이렉트 버전의 정의해주자.
다이렉트 인풋클래스로 돌아와서 LPDIRECTINPUT8,LPDIRECTINPUTDEVICE8 등 멤버변수를 추가해주자.
네컨에서 DirectInput8Create함수를 호출해주자.
1번인자. 인스턴스를 클라이언트로 부터 받아와야 한다.
2번인자. 다이렉트인풋버전을 넣어준다.
3번인자. IID_DIRECTINPUT8을 넣어준다
4번인자. 아웃풋
5번인자. 다른곳에 보관할까? 필요없다.
인풋sdk의 크리에이트 디바이스를 호출해주고
SetCooperativeLevel() - 윈도우가 협조레벨을 결정한다.(키보드와 마우스를 이 창 하나에 제어권을 부여한다. 게임에서 친게 다른곳에 입력되지않게해준다.)
1번인자. 윈도우 핸들을 받아서 넣어준다.
2번인자. 백그라운드,논익스클루시브 (키보드와 마우스는 주입력장치라서 이렇게해야한다 백그라운드는 내창이 뒤로가도 입력처리가 가능하게 한다.
SeDataFormat() - 기본으로 생성되는 키보드를 넣어주자.
Acquire()
키보드와 마우스를 지워주자
Invalidate_Input_Device()함수
내 키보드와 마우스의 상태를 가져온다.
멤버변수 DIMOSUESTAE에 마우스의 움직임과 버튼 클릭이 저장된다.
m_KeyState는 바이트의 배열로 키의 입력상태를 체크한다.
키보드의 상태마우스의 상태를 받아오자.
이함수는 무한으로 Tick에서 계속 호출이되어야한다.
키입력확인 변수들
Get_DIKState(_byte byKey)를 통해 바이트를 받아오자.
(키보드가 눌려있는지확인)
Get_DIMouseKeyState(DIM eMouseKey) 마우스버튼이 눌렸는지 확인한다.
열거체를 만들자 DIM {왼쪽버튼,오른쪽,휠버튼,X버튼}
Get_DIMouseMoveState(DIMM eMouseMove)
{
캐스팅을통해 주소값으로 접근해서 값을 반환해주자
}
게임인스턴스의 인풋디바이스를 추가해주자.
게임인스턴스의 틱에서 인풋디바이스의 Invalidate_Input_Device를 호출해주자.
다음 인풋디바이스의 세함수를 게임인스턴에서 사용할수있게 빼주자.
게임인스턴스의 이니셜라이즈에서 변수를 변경해서 인풋 디바이스도 바로 초기화를 해주자
MainApp에서 초기화 함수에 인자 넣어주자.
키입력을 받던부분을 수정해주자.
typeid함수를 사용하기위한 헤더를 추가해주자.
타입 인포 헤더를 추가해주자.
마우스 MoveState는 이전프레임기준으로 몇 픽셀 움직였는지 리턴해준다 오른쪽이면 양수
열거체를 만들자 DIM {x,y,휠}