DirectX 11

220929

슬뷔 2022. 10. 10. 01:14

1. 게임오브젝트 (엔터티 상속)

 

컴포넌트 기반 설계

좌표 데이터도 컴포넌트로 뺄 예정이다.

 

어떤 컴포넌트를 사용할 것인지에 대한 컴포넌트 배열만 가질 예정이다. 

 

게임 오브젝트 랜더링할 때에는 랜더링기능을 랜더링컴포넌트에 요청을 한다. -> 매쉬랜더

 

매쉬랜더 컴포넌트가 없을 수도 있다 -> 화면에 굳이 그려지지 않아도 되는 연산만 하면 되는?

특정 영역 근처에 플레이어가 가까이 오면 몬스터 스폰하는.. 로직만 작동하면 되는 것들

 

2. 컴포넌트

1) transform-> 오브젝트의 위치이동 담당 컴포넌트

render

2) meshrender

 

게임 오브젝트는 본인이 소유하고 있는 컴포넌트를 인덱스로 접근 가능하게 하고,

모두 다 컴포넌트를 상속받았기 때문에 부모 포인트 하나로 관리를 할 것이다.

그래서 배열의 타입을 부모타입으로 지정했다.

 

컴포넌트도 자신을 소유하고 있는 오브젝트가 누군지 알아야 한다.

 

게임오브젝트한테 트랜스폼, 매쉬랜더 주면 쌍방으로 주소값만 들고 있는 것이다.

게임오브젝트를 삭제한다는건 전체적으로 다 지워져야한다는 의미니까 

게임오브젝트만 삭제하면 배열 주소값만 삭제되는 것이지 가리키고 있던 컴포넌트가 삭제되는 것은 아니다.

그래서 배열 순회하면서 메모리 해제 시켜주어야 한다.

 

모든 컴포넌트들은 오브젝트에 추가될 때 부모파트인 컴포넌트에 게임 오브젝트의 주소값이 들어 있으니까 얻어오면 된다.

 

1) transform 컴포넌트

상대적 위치

상대적 크기

상대적 회전

 

업데이트 데이터에는 본인의 위치를 상수버퍼에 전달시킬 것이다.

 

랜더링 하기 전에 게임오브젝트의 트랜스폼에 저장되어있는 위치정보를 상수버퍼에 보내야한다,

이 매쉬랜더를 소유하고 있는 오브젝트의 위치정보를 상수버퍼를 통해서 gpu 메모리에 보내고,

바인딩 까지 다 해야하는데 이 기능은 transform의 업데이트에 구현이 되어있다.

 

2) meshrender 컴포넌트

어떤 매쉬로 그릴 것이고 어떤 쉐이더를 사용해서 랜더링을 할 것 인지 정해야한다.

 

3. 레벨

레벨 안에 레이어를 둘 것 이다.

레벨 안에는 여러가지의 레이어가 있다.

 

틱 다음에 내부적으로 호출되는 틱을 finaltick

 

레벨 하나가 만들어지면 32개의 레이어가 들어있다 ( 개수 32개로 지정함 )

 

1) 레벨 매니저

현재 레벨을 지정해서 레벨들을 관리한다.

 

각각의 시점함수들을 레벨에 요청한다.

m_pCurLevel->tick();

m_pCurLevel->finaltick();

m_pCurLevel->render();

 

tick -> 시점함수

하나의 레벨 안에서 틱은 오브젝트들이 delta time 동안 할 일들을 진행하는 단계

 

finaltick -> 시점함수

내부적으로 오브젝트들의 변경점들을 처리하는 단계

 

render -> 시점함수

위의 처리들이 다 끝나면 랜더링시점. 

물체들을 다시 화면에다가 재랜더링을 해서 이번 프레임 기준으로 갱신해주는 단계

 

하고 스왑체인을 이용해서 이번 장면을 넘기는 것이다.

 

4. 레이어

이전엔 씬이 백터를 물체를 그룹별로 관리했었는데, 이젠 그룹마다 클래스를 생성한다. -> finaltick

 

0번레이어 (포인터가 아니어서 . 으로 불러온다 -> m_arrLayer[0].SetName("Default")

 

0번 레이어 외에도 특정 레이어의 이름을 갖고싶다면, 레이어를 가지고 올 수 있으면 된다.

m_pCurLevel->GetLayer()->SetName();

괄호 안에는 레이어 넘버와 네임 이름을 적으면 된다.

 

이름을 지어준 다음엔 이름으로 레이어를 찾아올 수 있게 한다.

 

for (int i = 0; i< MAX_LAYER; ++i)

{

// 다 돌면서 같은게 있는지 찾고 같은게 있으면 걔로 레이어 주소값을 반환해주는 것이다,

   if (_strLayerName == m_arrLayer[i].GetName())

        return &m_arrLayer[i]

}

 

 

 

 

 

 

 

 

'DirectX 11' 카테고리의 다른 글

221004  (0) 2022.10.11
220930  (0) 2022.10.11
220928  (0) 2022.10.09
220927  (0) 2022.10.05
220926  (0) 2022.10.04