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와 생성한 것과 동일하므로 이전 강의 참조
'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 |