1. 이중 루프 구조:
```c
while (fdf->dots.y < fdf->height)
{
while (fdf->dots.x < fdf->width)
{
// 그리기 로직
}
}
```
- 이 이중 루프는 맵의 모든 점을 순회합니다.
- `fdf->height`와 `fdf->width`는 맵의 세로와 가로 크기를 나타냅니다.
2. 수평선 그리기:
```c
if (fdf->dots.x < fdf->width - 1)
bresenham(fdf, fdf->dots.x + 1, fdf->dots.y);
```
- 현재 점에서 오른쪽 점으로 선을 그립니다.
- 맵의 오른쪽 끝에 도달하면 그리지 않습니다.
3. 수직선 그리기:
```c
if (fdf->dots.y < fdf->height - 1)
bresenham(fdf, fdf->dots.x, fdf->dots.y + 1);
```
- 현재 점에서 아래쪽 점으로 선을 그립니다.
- 맵의 아래쪽 끝에 도달하면 그리지 않습니다.
4. Bresenham 알고리즘:
- `bresenham` 함수는 두 점 사이에 선을 그리는 효율적인 알고리즘을 구현합니다.
- 이 알고리즘은 정수 연산만을 사용하여 빠르게 선을 그릴 수 있습니다.
5. 이미지 표시:
```c
mlx_put_image_to_window(fdf->mlx_ptr, fdf->win_ptr, fdf->img.img, 0, 0);
```
- 그리기가 완료된 이미지를 윈도우에 표시합니다.
- `0, 0`은 이미지를 윈도우의 좌상단 모서리에 위치시킵니다.
이 함수의 작동 방식:
- 맵의 각 점을 순회하면서, 오른쪽과 아래쪽으로 선을 그립니다.
- 이렇게 하면 전체 맵을 커버하는 와이어프레임 그리드가 형성됩니다.
- Bresenham 알고리즘을 사용하여 각 선을 효율적으로 그립니다.
- 모든 선을 그린 후, 완성된 이미지를 윈도우에 표시합니다.
이 방식은 3D 와이어프레임 모델을 2D 화면에 효과적으로 표현할 수 있게 해줍니다.
'C Language' 카테고리의 다른 글
isometric vs perspective (0) | 2025.01.24 |
---|---|
Bresenham 알고리즘의 기본 원리 (0) | 2025.01.24 |
이미지 버퍼 초기화 함수 (0) | 2025.01.24 |
MiniLibx 기본 구현 알고리즘 (0) | 2025.01.24 |
c언어에서 exit(0)과 exit(1)의 간단한 차이점 (0) | 2025.01.24 |