본문 바로가기

C Language

3D draw 함수 설명

draw 함수 설명


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 화면에 효과적으로 표현할 수 있게 해줍니다.