GameChoi
Choi Programming
GameChoi
전체 방문자
오늘
어제
  • 분류 전체보기 (468)
    • C++ Algorithm & Study (184)
      • C++ & Algorithm Strategies (45)
      • Game Math & DirectX 11 (72)
      • Server + UE5 (29)
      • Lyra Clone Coding (37)
    • Create Game (284)
      • [Window API] Game Client & .. (55)
      • [DirectX] DirectX 2D & 3D (155)
      • [UE5] BLUEPRINT & C++ (74)
    • odds and ends (0)
      • English (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Direct3D
  • Game Server
  • client
  • Player Move Packet
  • protobuf
  • Game Room
  • UE5
  • core
  • Other Character
  • c++
  • Algorithm Strategies
  • job queue
  • Network Worker
  • session
  • RPG Game
  • Direct11
  • Destination Move Packet
  • GAME Client
  • Player State
  • server

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
GameChoi

Choi Programming

[Direct11] 12. EX App Program - Hills
C++ Algorithm & Study/Game Math & DirectX 11

[Direct11] 12. EX App Program - Hills

2023. 6. 14. 20:38

1. EX App Program

1.1 Hills

1.1.1 Create Grid Vertex

 - xz 평면에 격자 생성, m × n개인 격자는 (m - 1) × (n - 1)개의 낱칸으로 이루어짐

   - 각 낱간은 두 개의 삼각형으로 구성되며 총 2배의 삼각형이 필요

     - 격자의 너비 w, 깊이 d라고 하면 낱칸의 간격은 x축 일 경우 w / (n - 1), z축일 경우 d / (m - 1) ) 

       - 위의 정보를 바탕으로 격자의 왼쪽 상단 모퉁이에서 시작하여 각 행별로 좌표를 증가하면서 좌표를 계산

void GeometryGenerator::CreateGrid(float width, float depth, UINT m, UINT n, MeshData& meshData);

1.1.2 Create Index

 - 위의 함수를 통해 격자의 정점을 모두 계산하였으므로 격자 낱칸 삼각형들을 구성하는 Index 구성

   - 격자의 왼쪽 상단에서 부터 행별로 각 낱칸을 훑으면서 해당 낱칸 사각형의 두 삼ㄱ가형을 정의하는 Index 계산

     - 사각형 ABCD가 있다면 A에서 부터 시계방향으로 삼각형을 생성하고 C부터 시계 방향으로 삼각형을 생성

for(uint32 i = 0; i < m-1; ++i)
{
    for(uint32 j = 0; j < n-1; ++j)
    {
        //  [0] - [1]
        //   |	/
        //  [2]
        meshData.indices[k] = i * n + j;
        meshData.indices[k+1] = i * n + j + 1;
        meshData.indices[k+2] = (i + 1)* n + j;

        //        [4]
        //      /  |
        //  [3] - [5]
        meshData.indices[k+3] = (i + 1)* n + j;
        meshData.indices[k+4] = i * n + j+ 1;
        meshData.indices[k+5] = (i + 1) * n + j + 1;
        k += 6;
    }
}

1.1.3 Geometry Buffer

 - 위에서 생성한 클래스를 사용하여 격자 생성

GeometryGenerator::MeshData grid;
GeometryGenerator geoGen; geoGen.CreateGrid(160.0f, 160.0f, 50, 50, grid);

   - 격자의 크기를 가지고와서 Vertex Vector를 생성

     - 이후 x와 z의 좌표를 통해 높이를 변경 (변경하는 함수는 밑에 설정)

std::vector<Vertex> vertices(grid.vertices.size());
for (size_t i = 0; i < grid.vertices.size(); ++i)
{
    XMFLOAT3 p = grid.vertices[i].position;
    p.y = GetHeight(p.x, p.z); vertices[i].Pos = p;
}

float GetHeight(float x, float z) { return 0.3f * (z * sinf(0.1f * x) + x * cosf(0.1f * z)); }

   - 마지막으로 Vertex, Index Buffer의 구조체를 생성하여 버퍼 생성

HR(_device->CreateBuffer(&vbd, &vinitData, _vertedBuffer.GetAddressOf()));
HR(_device->CreateBuffer(&ibd, &iinitData, _indexBuffer.GetAddressOf()));

 - 이 후 Box와 생성한 것과 동일하므로 이전 강의 참조

 

[Direct11] 11. EX App Program - Color Box

1. EX App Program 1.1 Color Box 1.1.1 Geometry Buffer - 색상이 있는 박스를 생성하기 위해 각 정점에 대해 좌표 및 색상 적용 Vertex vertices[] = { { XMFLOAT3(-1.0f, -1.0f, -1.0f), XMFLOAT4((const float*)&Colors::White) }, { XMFLOAT3

choiprogramming.tistory.com

저작자표시 (새창열림)

'C++ Algorithm & Study > Game Math & DirectX 11' 카테고리의 다른 글

[Direct11] 14. Lighting System - Directional & Point & Spot Light  (0) 2023.06.15
[Direct11] 13. Lighting System - Diffuse & Ambient & Specular Light  (0) 2023.06.15
[Direct11] 11. EX App Program - Color Box  (0) 2023.06.14
[Direct11] 10. Direct3D Effect Framework  (0) 2023.06.14
[Direct11] 9. Direct3D API Interface & Function #2  (0) 2023.06.14
    'C++ Algorithm & Study/Game Math & DirectX 11' 카테고리의 다른 글
    • [Direct11] 14. Lighting System - Directional & Point & Spot Light
    • [Direct11] 13. Lighting System - Diffuse & Ambient & Specular Light
    • [Direct11] 11. EX App Program - Color Box
    • [Direct11] 10. Direct3D Effect Framework
    GameChoi
    GameChoi

    티스토리툴바