프로그래밍 공부

서울게임아카데미 교육과정 6개월 국비과정 113

카테고리 설명
  • 게임의 이펙트를 표시하고 사용하기 위해 사용하는 방식을 이야기한다. 대체적으로 Quad형태로 1차원평면으로 표시하는 경우와 3DObject를 생성하여 Object를 사용해서 이펙트를 표기하는 방법이다. Quad를 사용하는 방법은 대체적으로 과거에 최적화를 위해 사용하는 방식이고, 요즘에는 컴퓨팅 파워가 많이 발전해서, 오브젝트 생성방식을 사용한다. 일단, Quad형태로 뒷배경을 사용하는 방법을 사용해보자. #pragma once class BillboardScene : public Scene { private: const UINT COUNT = 1000; public: BillboardScene(); ~BillboardScene(); // Scene을(를) 통해 상속됨 void Update() overr..

  • A*알고리즘을 이해하기 위해서는 Dijkstra 알고리즘을 이해해야 한다. 일반적으로, Dijkstra알고리즘은 A*알고리즘의 하위호환이라고 이해하면 될 것이다. Dijkstra 알고리즘 간선간 연결되어있는 노드들을 예시로 들어보자. 이제 각 거리간 시간이 걸리는 정도를 계산하고 넣어보자. 이제 여기에서 전방위 순환을 하면서 가장 가까운 거리를 찾는 것 이다. 위와 같은 방식을 비슷하게 사용하나, 더 효율적인 방법으로 A*알고리즘 이 있다. 근처 Node를 순환하면서 필요한 인접Node만 탐색하는 방식으로. 전체순환을 할 필요가 없어 더 효율적이다. 각 계산수식을 살펴보자. float AStar::GetDiagonalManhattanDistance(int start, int end) { Vector3 s..

  • A*알고리즘을 통해 Terrain에서 움직이는 Object를 구현해보자. 먼저 A*알고리즘을 구성해주는 AStar를 정의한다. #pragma once class AStar { public: AStar(UINT width = 20, UINT height = 20); ~AStar(); // Render: 그리드의 현재 상태를 표시합니다 (디버깅 또는 시각화 목적). void Render(); // SetNode: 지형 정보로 A* 그리드를 초기화합니다. void SetNode(Terrain* terrain); // FindCloseNode: 주어진 위치를 기반으로 가장 가까운 노드를 찾습니다. int FindCloseNode(Vector3 pos); // GetPath: 시작 노드에서 종단 노드까지의 최적 ..

  • Map의 블랜딩을 여러개 중첩하여 적용해보자. 원래 있었던 Hight를 수정하는 Editer에 Alpha값을 추가하여 수정하고, 저장 , 불러오기를 할 수 있게 할 것이다. 우선 MapEdit용 shader를 추가로 제작한다. #include "../VertexHeader.hlsli" #include "../PixelHeader.hlsli" struct VertexInput { float4 pos : POSITION; float2 uv : UV; float3 normal : NORMAL; float4 alpha : ALPHA; }; struct PixelInput { float4 pos : SV_POSITION; float2 uv : UV; float3 normal : NORMAL; float3 tang..

  • Terrain을 제작하는 Editer를 제작할 것 이다. Editer에는 어떤 기능이 필요한지 생각해보아야 한다. 1. 마우스와 Terrain의 위치에 따른 원형 표시. 2. 마우스가 눌렸을 때 해당 위치의 Terrain의 vertice가 변화하여야 한다. 3. 변화한 vertice에 따른, Diffuse값과 normal값을 재정의 해주어야 한다. 4. 맵 을 불러왔을때, 다른사이즈의 map의 경우. 해당 map의 사이즈만큼 Buffer를 재정의 해주어야 한다. 제작해보자. #pragma once class TerrainEditer : public GameObject { private: //typedef VertexUVNormal VertexType; // VertexType을 정의합니다. // Vert..

  • 컴퓨터 쉐이딩 우선, 컴퓨터 쉐이딩을 알기 위해서는 스레드와 멀티프로세스를 이해해야한다. 스레드는 작업 한개를 처리하는 단위이고, 멀티프로세스는 멀티스레드 를 사용해서 동작하는 프로세스를 여러개 돌린다고 이해하면 된다. DriectX에서 스레드와 뮤텍스 라이브러리로 다중 스레드 프로그래밍을 사용할 수 있다. 쓰레드와 뮤텍스 라이브러리로 다중쓰레드를 사용할 수 있다. #include #include #include DirectXCollision은, 비효율적이지만, 다중처리방식을 사용하면 큰 부하를 일으키지 않고 사용할 수 있다. 위와같은 멀티프로세스 방식의 코딩을 사용하면, 비동기 방식의 데이터처리 시 더 효율적으로 사용할 수 있다. 예를들어 플레이어가 아이템을 주워서 인벤토리에 넣었다고 가정해보자. 그렇..