d3dx9 - 21.10.25

김주현·2021년 10월 25일
0

d3dx9 3D

목록 보기
14/30

카메라를 만들기전 기존의 만든 트랜스폼 클래스에대한 처리를 해줌

엔진의 트랜스폼 클래스

객체의 월드공간상에서의 상태를 표현한다.
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); // 추적

타겟을 바라보는 벡터를 구하자

  1. 타겟의 위치벡터를 구해와서 그 벡터에서 나의 위치벡터를 뺴면

타겟을 바라보는 벡터를 구할수있다. 정규화한후 더해주고 월드좌표에 적용해준다.

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값으로 회전하라.

  • SetUp_Rotation(축,각도) 구현
라업룩 세벡터는 모두 직교한다 -> 라업룩 세벅터를 모두 받아온 각도만큼 회전시켜야한다.

현재 내객체에 회전 행렬을 적용하는것이 아닌 회전되지않은 기본벡터에 회전행렬을 적용한 값을 넣어 준다.

라업룩에는 현재 객체의 스케일이 들어가있음 이를 무시하고 1로 만들면안됨

{
Get_Scale 함수 구현하자

D3DVec3Length( 각 라업룩을 넣어주자)

이렇게 얻은 세 벡터의 길이를 벡터로 만들어서 리턴해주자)

}


벡터 라업룩을 선언하고 


각 초기값으로 초기화한 세 라업룩 벡터를 겟_스케일로 얻어온 스케일값으로 각각 곱해주자.


방향벡터를 회전한다 = 위치벡터를 이동시킨다.

D3DXMatrixRotationX로 X축을 회전시킨다.

D3DXMatrixRotationAxis는 세축을 모두 회전시킨다.
D3DXMatrixRotation(매트릭스를하나 선언해서 넣어주고,축,각도)

normal은 끝값을 0으로 줌 -> 위치값을 무시한다.
Coord는 끝값을 1로줌 -> 위치값을 받음

방향벡터는 위치값을 가지지않는다(어디있든 똑같다) 오로지 길이와 어디를 바라보고있는지만으로 비교한다.

D3dXvecTransformNormal(라이트,라이트,회전행렬)을 Set_State에 인자로 넣어주자

-Rotation_Axis()


라업룩 벡터를 모두 얻어오고

회전행렬을 구하는 부분에서 각도가 아닌 (회전값 * 시간) 을 넣어주자

나머진 위 함수와 같다.
  • 테스트시 함수 호출로 컬링을 끌수 있다.

0개의 댓글

관련 채용 정보