D3DX9 - 21.11.12

김주현·2021년 11월 12일
0

d3dx9 3D

목록 보기
25/30

스카이박스

카메라를 어느방향으로 돌려도 하늘이 보여야함 -> 큐브로 많이 구현함

큐브 안에서 큐브를 바라봄 후면출력 반시계로 해줘야한다.

반구를 사용하는방법도있으나 정점이 많이 들어가서 프레임드랍이 심함

VIBuffer_Cube 구현

VIBuffer_Rect를 복사해서 만들자.(기능이 비슷하기때문)

m_iNumVertices -> 8 큐브는 8개의 정점을 가진다.

m_iStride -> 새로운 구조체 tagVertexCubeTexture를 만들자. 이 구조체는 UV좌표를 3차원으로 사용해야한다.

왜? 똑같은 이미지를 6개의 면에올린다고 할때 한정점의 UV좌표를 여러개 잡아야하는경우가 생김 그래서 DX는 큐브의 중심에서 정점을 바라보는 방향 벡터로 UV좌표로 정의함

주사위처럼 큐브에 각면에 다른 이미지를 올리고 싶다면?
이미지 6장 준비가아닌 1장에 6장의 이미지를 넣는다.
왼,오른쪽,위쪽,아래,후면,전면 순으로 이미지를 넣어야한다.
(반드시 다이렉트 전용파일 dds인파일로 만들어야한다.)

DirectX Skybox Texture검색해서 찾아보기

m_dwFVF -> D3DFVF_TEXCOORDSIZE3 (몇번째 UV좌표가 float_3인지 알려줘야함) 추가
장치는 FVF가 선언된 순서랑 동일하게 해줘야함

uv 좌표는 어차피 방향벡터에서 원점을 뺀다 그냥 위치 좌표 그대로 넣어주면된다.

m_iNumPrimive = 삼각형 12개


버텍스 정점을 채워주자.

인덱스 정점을 채워주자.

컴포넌트 매니저에 VI버퍼 큐브 헤더를 추가해주자.

클라이언트에 큐브 추가

로더 클래스의 레디_게임플레이0에서 VI_Buffer_Cube를 추가해주자.

게임오브젝트 폴더에 스카이를 추가해주자.

버퍼렉트에서 큐브로 수정

Add_Component()도 렉트에서 큐브로 수정

엔진의 텍스처로드를 수정해야한다.
(현재는 이미지로만 한정되어있기때문 dds파일 읽어올려면 함수가 다르다. 저장하는 타입도 다르다)

m_Textures를 부모의 타입으로 수정해주자.

TYPE 열거체 선언

이를 Create와 네컨 프르토에서 인자로 받게 수정해주자.

네컨_프로에서 타입에 따라 다른 함수를 호출하게 변경해주고 pTexture를 형변환해준다

클라이언트에서 텍스처를 불러오던부분에서 타입을 던져주도록 수정해준다.

로더의 레디레벨게임플레이에서 텍스처 불러오자.

스카이 클래스

Add_Components에서 스카이박스 텍스쳐 추가해주자.
(Free에서 릴리즈 해주자)

Late_Tick - 렌더그룹을 Priority로 변경해주자.

Render함수에서 파이프라인으로 가져와 월드,뷰,투영을 채워주자.

로더 클래스에서 스카이를 생성해주자.(원형)

레벨_게임플래스 클래스에서 백그라운드 생성에서 하늘 객체를 만든다.
렌더에서 불끄고 컬모드를 cw로 주자.

LateTick에서 스카이박스의 위치를 카메라로 이동시켜주자

파이프라인의 뷰행렬(카메라의 월드행렬 역행렬)의 역행렬 = 카메라의 월드행렬의 4행 이 위치이다.

뷰매트릭스를 가져와서 역행렬해주자.해서 4행을 포지션으로 셋해주자.(형변환해줘야함)

지금은 스카이박스만 그려짐 스카이를 그릴때 z값 비교를 꺼야함

ZWRITEENALBE -> false로 해주자

피킹

마우스를 클릭했을때 모니터중심에서 마우스방향으로가는 레일을 구해서 폴리콘이랑 어떻게 교체되는지를 파악한다.

0개의 댓글

관련 채용 정보