DirectX89 29. 엔진구조_Material Material과 Mesh라는 개념으로 MeshRenderer.h에 있는 아래의 애들을 빼줄 것이다. // Mesh shared_ptr _geometry; shared_ptr _vertexBuffer; shared_ptr _indexBuffer; // Material shared_ptr _inputLayout; shared_ptr _vertexShader; shared_ptr _pixelShader; shared_ptr _texture1; 00.Engine / Resource 필터에 파일들을 파 두었다. 1. Mesh Mesh의 개념은 물체가 어떻게 생겼는지 유니티에서 보면 Cube, Sphere 등 고를 수 있다. 1) MeshRenderer.h의 // Mesh 부분을 Mesh.h로 옮긴다. #prag.. DirectX 2024. 1. 26. 28. 엔진구조_ RenderManager Render를 관리하는 RenderManager를 만든다. 00.Engine / Manager필터에 Render필터를 만든다. Render를 RenderManager에서 하게 하는 것뿐만 아니라 MeshRenderer의 코드 수정이 필요하다. MeshRenderer를 보면 Mesh가 있고 일부분이 Material로 빠져야 한다. Render필터에 RenderManager클래스를 만든다. SceneManager처럼 물체들을 들고 있는 건데, RenderManager는 그리는 물체들을 전용적으로 들고 있다는 차이가 있다. 조명이 생긴다거나, 카메라가 여러개여러 개 등장하거나, 렌더링이 되어야 하는데 MeshRenderer가 여러 개 있거나 여러 상황을 케어해 주는 게 목표다. 1. RenderHelper 클.. DirectX 2024. 1. 23. 27. 엔진구조_ResourceManager 1. pch.h 헤더에서 #include 제거하기 헤더에 #include를 하면 꼬여서 에러가 날 수 있기 때문에 pch.h에 가서 #include "Game.h" 을 삭제한다. 2. wWinMain에 GGame 적용하기 빌드를 해보면 빌드가 된다. 이제 Game을 전역으로 사용하기 위해 만든 GGame만 이용해야 하는데, GameCoding의 wWinMain에서 보면 Game game; game.Init(hWnd); Game game은 Stack 메모리에 임시적으로 만들어서 사용하는 건데 이제 얘는 사용하면 안 되고 GGame버전을 이용해야 한다. int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ .. DirectX 2024. 1. 22. 26. 엔진구조_SceneManager 구조를 잡아본다. MeshRenderer.h에서 보면, 나중에 Mesh는 Rsource로 빼줄 것이고, Material도 빼 줄 것이고, 일부분은 MeshRenderer라고 해서 그리는 역할을 맡게 될 무엇인가를 만들어 줄 건데 그걸 통합해 관리하기 위해 매니저 시스템을 도입하도록 한다. 여러 방식이 있을 수 있다. 00.Engine 필터에 Manager 필터를 만든 다음에 공용으로 관리할 애들을 빼줄 것이다. 현재는 Game클래스가 총괄 대장인 느낌이고, 여기에 이런 저런 기능을 넣어줄 것이다. 대표적으로 InputManager, FrameManager(시간 관리), SceneManager(오브젝트 관리) 그걸 하려면 Manager 클래스에서 다양한 기능들을 제공해야 한다. 이를 위해 Manager 필.. DirectX 2024. 1. 21. 25. 엔진구조_MeshRenderer Camera만 Shader와 연동해 적용을 시켜보고 지저분한 코드들을 이전하는 작업을 해볼 것이다. 1. Camera Data(View, Projection), TransformData를 각각 따로 받아가지고, 전송하게 하기 1) Shader의 cbuffer TransformData를 CameraData와 TransformData로 분리 Default.hlsl에 가보면 cbuffer TransformData : register(b0) // 상수 버서 TransfromData를 받아 줄 건데, 버퍼의 약자인 b0를 받아 주도록 할거야. { row_major matrix matWorld; row_major matrix matView; row_major matrix matProjection; } 지금까지는 V.. DirectX 2024. 1. 19. 24. 엔진구조_Component DirectX나 OpenGL로 연습하면 좋은 두가지 의미 그래픽스 지식 엔진 구조를 잡는 거 자체가 고민 거리가 많다. 아직 GameObject에 렌더링 기능이 몰빵이 되어 있다. Camera, Animation도 지원을 하지 않고 있다. 2D sprite로 애니메이션을 트는 것까지가 이번 시간의 목표이다. 그와 별개로 구조에 대한 얘기를 더 해본다. 지난 시간에 transform 이라는 빈 컴포넌트를 만들어 보았다. 유니티를 보면 빈 GameObject에 여러 컴포넌트들이 붙는다. 유니티에서 스크립트를 GameObject에 붙일 수 있는데 스크립트를 열어 보면 MonoBehaviour를 상속 받고 있고, MonoBehaviour를 타고 가면 Component를 상속 받고 있는 것을 볼 수 있다. Gam.. DirectX 2024. 1. 17. 22. 프레임워크 제작_GameObject 1. GameObject 클래스 요약: Object 마다 가지고 있어야 할 내용들을 Game클래스에서 GameObject 클래스로 이동 시켰다. 1) GameObject.h에 Game.h의 내용 이전 Game.h에 필요한 건 뭘까? shared_ptr _graphics; shared_ptr _pipeline; 두 개 뿐만 아니라 Game.h에 shared_ptr로 되어 있는 모든 물체들을 묶어서 관리할 필요가 생긴 것이다. 그리고 Game::Render에서 세팅해준 부분들이 방대하다. void Game::Render() { _graphics->RenderBegin(); // IA - VS - RS - PS - OM { PipelineInfo info; info.inputLayout = _inputLayo.. DirectX 2024. 1. 5. 21. 프레임워크 제작_Pipeline 1. rasterizer, samplerState, blendState 클래스 애매한 3 총사, rasterizer, samplerState, blendState 3 총사를 정리하고, 다시 조립하는 것을 해볼 것이다. 03.Rasterizer에 RasterizerState, 04.PixelShader에 SamplerState, 05.OutputMeger에 BlendState 클래스를 추가한다. Rasterizer는 VS에서 PS로 넘어가기 전에 Rasterizer에 대한 옵션을 선택할 수 있는 거, SamplerState는 uv매핑을 할 때 어떤 식으로 할지 옵션과 관련 BlendState는 최종적으로 화면이 출력이 될 때 어떤 식으로 생상을 섞을지와 관련이 있었다. #pragma once class R.. DirectX 2024. 1. 5. 20. 프레임워크 제작_Shader 1. Shader, VertexShader, PixelShader 클래스 // VS ComPtr _vertexShader = nullptr; ComPtr _vsBlob = nullptr; vertexShader와 blob을 묶어 줘야 하고, // PS ComPtr _pixelShader = nullptr; ComPtr _psBlob = nullptr; pixelShader와 blob을 묶어줘야 한다. vertexShader와 pixelShader를 따로 만들어줘도 괜찮긴 한데, LoadShaderFromFile이라는 런타임에 실행할 때 shader를 blob이라는 애로 만드는 함수가 있는데, 버텍스셰이더, 픽셀 셰이더가 공용으로 사용하는 애다. 따로 만드는 게 애매하다. 기본적으로 공용 함수는 있기 때문.. DirectX 2024. 1. 3. 19. 프레임워크 제작_Geometry 1. shared_ptr로 바꿔주기 shared_ptr이 안되던 걸 해결하기 위해 pch.h의 //STL에 #include #include 를 추가한다. Game.h로 가서 Graphics* _graphics; 에서 shared_ptr _graphics; 이걸로 바꿔준다. 생 포인터를 사용하면 안 된다. VertexBuffer* _vertexBuffer; 이것도 shared_ptr _vertexBuffer; 이렇게 IndexBuffer* _indexBuffer; InputLayout* _inputLayout; 이것도 shared_ptr _indexBuffer; shared_ptr _inputLayout; 이렇게 바꾼다. Game::Init으로 가서 _graphics = new Graphics(hwnd);.. DirectX 2024. 1. 2. 18. 프레임워크 제작_InputAssembler 지난 시간에 분리한 device나 deviceContext는 많이 쓰는 애들이니까 나중엔 전역으로 만들어서 언제 어디서나 편하게 접근할 수 있게 하는 걸 고려할 수도 있다. 그다음 할 것은 Geometry, VS와 관련된 부분들 이렇게 2가지에 접근을 했다. 어떻게 분해해야 할까? 먼저 Game::CreateGeomerty에서 Gerometry라고 한 건 기하학적인 걸 만들어서야. 엄밀이 말하면 vertex buffer와 geometry는 다르다. geometry는 물체에 대한 정보, VertexBuffer는 GPU에 넘겨주는 버퍼를 얘기한다. 기하학적인 정보를 담기 위해 Vertex라는 구조체를 만들어서 사용했는데 이게 맞을까? 이게 셰이더랑 연관이 있어서 uv 좌표를 매핑해서 텍스쳐를 붙이는 용도가 .. DirectX 2024. 1. 1. 17. 프레임워크 제작_Graphics 2D 물체를 화면에 그릴 수 있으면 생각보다 프레임 워크를 만드는 건 어렵지 않다. 입력이나, 시간을 잰다거나 하는 각종 매니저, 씬 매니저 이런 것들을 하나씩 추가를 하고, 2D도 텍스쳐 하나 띄우고 끝나는 게 아니라 애니메이션을 돌려야 하기 때문에 여러 개의 텍스쳐를 교체하면서 보이게 만들어줄 수 있으면 그게 2D 게임이라고 볼 수 있었다. 여기까지 했다면 거의 2D 포폴은 만들 준비가 끝났다. 오늘 할 것은 Game 클래스에 만든 내용들을 클래스 별로 분할해서 엔진같은 구조를 만들 거야. 언리얼 엔진을 분석해도 실제로 이런 식으로 되어 있다. 재배치하면서 복습하는 느낌으로 한다. 여기에 애니메이션, 데이터 관리 붙이면 거의 완성된 2D 엔진이 된다. transform 이라고 어떤 오브젝트가 다른 오.. DirectX 2023. 12. 30. 이전 1 ··· 3 4 5 6 7 8 다음