브레 센햄
예전에는 사람들이 여전히 선과 원을 그리기 위해 자신의 기본 비디오 루틴을 작성하고 있었지만 브레 센햄 선 알고리즘을 사용하는 것은 들어 본 적이 없었습니다.
Bresenham은이 문제를 해결합니다. 화면에 선을 그려 dx
가로 방향으로 픽셀 을 이동 시키면서 동시에 dy
세로 방향으로 픽셀에 걸쳐 있습니다. 선에는 고유 한 "floaty"문자가 있습니다. 정수 픽셀이 있더라도 합리적인 기울기로 끝납니다.
그러나 알고리즘은 빠르므로 정수 산술 만 사용할 수 있습니다. 또한 곱셈이나 나눗셈없이 더하기와 빼기만으로 도망칩니다.
귀하의 경우에 맞게 조정할 수 있습니다.
- Bresenham 알고리즘의 관점에서 "x 방향"은 시계입니다.
- "y 방향"은 증가시키고 자하는 값입니다 (예 : 캐릭터의 위치-주의 : 이것은 실제로 스프라이트의 "y"가 아니거나 화면의 어떤 것이지, 더 추상적 인 값이 아닙니다)
여기서 "x / y"는 화면상의 위치가 아니라 시간에 따른 치수 중 하나의 값입니다. 분명히 스프라이트가 화면을 가로 질러 임의의 방향으로 움직이면 여러 개의 Bresenham이 별도로 실행됩니다 (2D는 2D, 3D는 3D).
예
축 중 하나를 따라 0에서 25 사이의 간단한 움직임으로 캐릭터를 움직이고 싶다고 가정 해 봅시다. 속도 2.5로 움직이면서 프레임 10에 도착합니다.
이것은 "0,0)에서 (10,25)까지"선 그리기 "와 동일합니다. Bresenham의 라인 알고리즘을 잡고 실행하십시오. 제대로하면 (그리고 공부할 때 어떻게해야하는지 빨리 알 수 있습니다), (0,0), (1,2), (2, 5), (3,7), (4,10) ... (10,25).
적응에 대한 힌트
해당 알고리즘을 Google로 검색하고 코드를 찾은 경우 (Wikipedia에 꽤 큰 조약이 있음)주의해야 할 사항이 있습니다.
- 분명히 모든 종류의
dx
및에 적용 dy
됩니다. 그래도 하나의 특정 사례에 관심이 있습니다 (예 :) dx=0
.
- 일반적인 구현 여부에 따라 화면의 사분면에 대한 여러 가지 사례를해야합니다
dx
및 dy
긍정적, 부정적, 또한인지 abs(dx)>abs(dy)
여부. 물론 여기에서 필요한 것을 선택하십시오. 1
모든 틱마다 증가하는 방향 이 항상 "시계"방향 인지 확인해야합니다 .
이러한 단순화를 적용하면 결과는 실제로 매우 간단하고 실수를 완전히 제거 할 수 있습니다.