🎨DirectX

[DX] 그리드(Grid) 그리기, 그리드 공식

공대 컴린이 2023. 2. 4. 20:32
728x90

🎨 그리드(Grid) 그리기

가로 정점의 수는 "칸 수 + 1"으로 볼 수있고, 한칸을 그릴 때 필요한 인덱스의 개수는 "칸 수 x 6" 이 된다.

전체 그리드의 정점의 개수(Vertex Count)는 (width+1) * (height+1) 이 될 것이고,

전체 그리드의 인덱스의 개수(Index Count)는 (width)* (height) * 6이다.

 

각 칸의 규칙을 따라가면 그리드를 그릴 때 필요한 사각형의 인덱스를 구성하는 공식을 찾을 수 있다.

 

우선 3x3 그리드에서 중앙에 있는 사각형의 인덱스 정보는 아래와 같다.

왼쪽 하단: 5  / 오른쪽 하단: 6 / 왼쪽 상단: 9 / 오른쪽 상단: 10

이제 해당 결과를 바탕으로 가로(width) = 3, 세로(height) = 3인 그리드에서 한 칸의 사각형을 구성하는 공식은 아래와 같다.

왼쪽 하단: (width + 1) * y + x
왼쪽 상단: (width + 1) * (y + 1) + x
오른쪽 하단: (width + 1) * y + (x + 1)
오른쪽 상단: (width + 1) * (y + 1) + (x + 1)

 

검토)

왼쪽 하단 공식 (width + 1) * y + x에 가운데 사각형 정보(왼쪽 하단 x,y : 1,1)를 대입해보면,

(3 + 1) * 1 + 1 = 4 * 1 + 1 = 5

왼쪽 하단 인덱스인 5 결과가 정상적으로 나온것을 확인할 수 있었다.

 

해당 수식을 이용하여 for문을 사용한 그리드 그리는 코드는 아래와 같다.

UINT index = 0;
for (UINT y = 0; y < height; y++)
{
	for (UINT x = 0; x < width; x++)
	{
		indices[index + 0] = (width + 1) * y + x;
		indices[index + 1] = (width + 1) * (y + 1) + x;
		indices[index + 2] = (width + 1) * y + (x + 1);
		indices[index + 3] = (width + 1) * y + (x + 1);
		indices[index + 4] = (width + 1) * (y + 1) + x;
		indices[index + 5] = (width + 1) * (y + 1) + (x + 1);
        
		index += 6;
	}
}

[ 실행 결과 ]

728x90