[Math] 브레젠험 알고리즘 with Unity
■ !! 이론
이전 포스팅에서 이론 관련 게시글을 포스팅하였다.
https://yjhdevelopdiary.tistory.com/158
[Math] 브레젠험 알고리즘 (Bresenham's algorithm)
■ 개념 및 배경 선 그리기 알고리즘 (line algorithm)의 대표 모델이다. 우리가 원하는 물체를 컴퓨터 스크린 화면에 나타내는 작업을 픽셀화(Rasterization)라고 한다. 데카르트 좌표계 위에 존재하는
yjhdevelopdiary.tistory.com
■ 유니티
먼저 아래와 같이 Hierarchy와 Scene을 세팅해놨다. PixelManager에서 Canvas에 동적으로 내가 만든 픽셀 이미지와 화살표를 그려 놓을 것이다.
▼ 제작한 화살표 프리팹
▼ 제작한 픽셀 프리팹
스크립트 이름 | 기능 |
PixelManager | 픽셀과 관련된 객체를 관리한다. 전체적인 객체 동적 생성, 움직임 제어 및 다음 픽셀 선택과 표시 기능 등을 함 |
PixelArrow | StartPoint와 EndPoint를 매니저로부터 넘겨받으면 해당 객체로 향한 회전, 크기, 위치 변환을 시행함. |
PixelSquare | 따로 직접하는 행동은 없고 본인의 상태를 변수로 갖고있음. 픽셀 자체로서의 의미가 있는 스크립트 |
▼ PixelSquare (픽셀)
픽셀을 흉내내기 위해 직접 제작한 프리팹. 부모인 Canvas/PixelParent 객체는 GridLayoutComponent를 갖고있어 자동 정렬을 시행함
▼ PixelArrow (픽셀 화살표)
방향과 현재 진행중인 움직임을 표시
[enum]
디버그용으로 체크할려고 선언했었으나, 구현에는 크게 중요하지않음
[변수]
[주요 함수 (Init, OnUpdate, OnReset]
[ 회전변환에 사용되는 부수적인 함수들 ]
▼ PixelManager (픽셀들과 화살표를 관리하는 책임자)
Awake시 픽셀 동적 생성 및 초기화를 해준다.
[Awake, Start, Update]
[Refresh 함수와 StartPoint 및 EndPoint를 랜덤으로 반환해주고 인덱스를 캐싱하는 함수]
[색칠해줄 픽셀을 선정하는 함수, 픽셀 색칠이 가능한지를 판단하는 함수, 색칠하는 함수]
[지나갈 픽셀들을 골라주는 함수 (★)]
▼ 아래와 같이 Line에 가까운 픽셀을 골라 이동하는 것을 확인할 수 있었다.
[gif]