🕹️자체엔진/DirectX 12 개인공부

[ DirectX12 지형엔진 ] 일단 기본 프레임워크 제작끝....

Mawile 2022. 5. 4.
728x90

후....

일단 기본적으로 dx11기반으로 진행하는 rastertek강의를 위한 dx12프레임워크 제작끝...

저가 대충 rastertek 지형엔진 강의 둘러봤는데, dx12로해도 상관없을것같음.

 

이번에 만든엔진은 책이나 인터넷안보고 아예 1부터 100까지 저의 머릿속내용으로만 코딩했어용.

실력좀 늘리려고 책이나 인터넷안보고 머릿속으로만 코딩해서 잘되가고 있는지는 모르겠네용...

그래도 아직까지는 오류없이 잘 동작하니까 굿..!

오늘한거 깃허브에 커밋하고 저는 잡니다....

 

쓰으읍..하....

다음은 그리드랑 카메라이동이네요...

카메라이동기법은 이미 알고있지만, rastertek강좌에서는 어떻게 구현하는지도 배울겸, 이부분은 그대로 rastetek강좌보면서하고,

그리드(Grid) <-- 이부분은 그냥 저가 책에서 배웠던내용을 기반으로 만들어야겠습니다.

이유가 있어요...

 

 

사실 rastertek강좌보면서 매번 느끼는게 인덱스버퍼 활용을 진짜 못하더라구요.

예를들어서

 vertexbuffer내용이 { 1, 3, 2, 5, 6 ,7, 1 }

(예를든것이기때문에 vertexbuffer는 아무숫자나넣음.) 이런식의 정점버퍼가있다면,

rastetek강좌에서는 인덱스버퍼를 그냥 이렇게넣어서, 본래 인덱스버퍼가 가지는 존재의의와 장점을 전혀 못챙김..

indexbuffer = { 0, 1, 2, 3, 4, 5, 6 }

 

이해안가시죠??

그림으로 그려서 설명해드림.

이런식으로 4개의 정점(v1, v2, v3, v4)을 가지는 사각형메쉬가 있다고 가정합시다.

저희가 왼손법칙을 적용했을때를 기준으로...

시계방향으로 삼각형을 만들면

 

rastertek에서는...

vertexbuffer: [v1, v4, v3, v1, v2, v4]

indexbuffer: [[0, 1, 2, 3, 4, 5]]

 

내가 배웠던 책에서는...

vertexbuffer: [v1, v2, v3, v4]

indexbuffer: [[0, 1, 3], [0, 3, 2]]

 

대충이런식입니다.

rastertek강좌는 vertexbuffer에서 아예 삼각형을 만들어서 indexbuffer는 그냥 숫자만채우는 형식이고,

저가 배웠던 책은 vertexbuffer를 최소한의 갯수로 채우고, indexbuffer에서 삼각형을 만드는 형식....

 

결과론적으로 누가봐도 밑의 방법이 효율적임.

물론 위와같은예는 정점크기가 작으니까 상관없겠지만,

복잡한메쉬를 다룰때에는 최악의 cpu랑 gpu성능차이를 보여줄거임.

애초에 rastertek강좌에서 쓰는 방식은 indexbuffer의 사용의의와 indexbuffer의 장점을 전혀 살리지못하는방법이기때문에...

 

흠...

그래서 저는 그리드(메쉬[:mesh])생성부분은 기존에 책에서 배웠던내용을 기반으로 직접구현할 생각입니다..

바이바이~~

 

 

 

728x90

댓글