FDF란 2차원 평면상의 도형을 3차원처럼 보여주는 투영법을 적용하여 보여주는 기법입니다.
이때, 사용한 투영법은 isometric projection이며 오일러 각을 사용하였습니다.
등축투영법을 의미합니다. 대각선을 화면에 수직으로 하여 입방체를 투영했을 때 세 측변이 각각 120°로 만나고, 윤곽이 정육각형으로 되는 투영법이라고 할 수 있습니다. 삼각함수를 이용하고, 특히 오일러 각을 회전행렬로 변환합니다.
DDA 알고리즘은 양 끝점이 주어졌을 때 화면 위 직선을 그릴 수 있는 알고리즘입니다.
양 끝점을 이용해서 X, Y의 증가분을 구합니다. 이후 X 가 1 증가할 때 Y가 어느정도로 증가하는지를 계산,
좌표를 구하고 해당 좌표의 픽셀을 채워줍니다.
즉, X가 1만큼 증가할 때 Y는 그만큼 증가하지 못했다면 X축쪽으로 기운 것이고, Y가 1만큼 증가할 때 X가 그만큼 증가하지 못했다면 Y축 쪽으로 기운 것입니다.
이를 이용한다면 선분을 이어줄 수 있습니다.
( 참고사항 ) 브레젠험 알고리즘(Bresenham’s line algorithm)도 직선을 연결할 수 있습니다. 다만, DDA는 double 자료형이 사용되며, 브레젠험 알고리즘은 int 자료형이 사용된다는 차이가 있습니다. 부동소수점까지 처리해왔기 때문에 double형이 사용되는 DDA를 사용하였습니다.
- 파일 이름 유효성 체크: .fdf 4개가 맞으면 맞다
- 파싱: 크기 구하기 → 좌표 부여(컬러 포함)
- 등축투영: z축으로 회전 → x축으로 회전
- 등축투영한 x,y좌표 중 최대 최소 값 구하기
- mlx 세팅
- 사이즈업: 기존 좌표는 픽셀 단위 = 작게 나온다 → 윈도우 벗어나지 않는 gap 구하기 → 키운다
- 가로선(draw_col) 그려주기: dda 알고리즘으로 선분을 이어준다(gap적용)
- 세로선(draw_row) 그려주기: dda 알고리즘으로 선분을 이어준다(gap적용)
- 이미지 출력
-> https://github.com/ailopez-o/42Barcelona-FdF
-> https://github.com/bil0u/FdF.git
컴파일에 사용되는 mlx라이브러리는 버전이 다양합니다. 해당 파일에서는 x86 아키텍처가 사용되었으므로, 개인 맥북과 같은 ARM 아키텍쳐에서는 컴파일이 불가능합니다.