Computer Graphics/Math

[Math] 브레젠험 알고리즘 with Unity

진현개발일기 2023. 12. 9. 00:01

■ !! 이론

이전 포스팅에서 이론 관련 게시글을 포스팅하였다.

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]

디버그용으로 체크할려고 선언했었으나, 구현에는 크게 중요하지않음

(출처:https://www.includehelp.com/computer-graphics/bresenhams-circle-drawing-algorithm-in-computer-graphics.aspx)

 

 

[변수]

 

[주요 함수 (Init, OnUpdate, OnReset]

[ 회전변환에 사용되는 부수적인 함수들 ]

 

▼ PixelManager (픽셀들과 화살표를 관리하는 책임자)

Awake시 픽셀 동적 생성 및 초기화를 해준다.

 

[Awake, Start, Update]

 

[Refresh 함수와 StartPoint 및 EndPoint를 랜덤으로 반환해주고 인덱스를 캐싱하는 함수]

 

[색칠해줄 픽셀을 선정하는 함수, 픽셀 색칠이 가능한지를 판단하는 함수,  색칠하는 함수]

 

0.6초마다 픽셀을 색칠해준다.
앞서 선별한 (지나갈) 픽셀들을 활성화시켜준다.

 

[지나갈 픽셀들을 골라주는 함수 (★)]

 

▼ 아래와 같이 Line에 가까운 픽셀을 골라 이동하는 것을 확인할 수 있었다.

 

 

[gif]