앤티 앨리어싱 된 빠른 선 그리기


11

Bresenham의 선 알고리즘은 빠른 정수 연산 (더하기, 빼기 및 곱하기 2) 만 사용하여 직선을 그리는 방법입니다. 그러나 별명을 생성합니다. 앤티 앨리어싱 선을 그리는 비슷한 방법이 있습니까?


1
몇 가지 질문 ... CPU 또는 GPU에서 드로잉 로직을 수행하고 있습니까? 또한 정수 기반 알고리즘 또는 부동 소수점을 찾고 있습니까?
Alan Wolfe

5
@AlanWolfe, CPU의 정수 알고리즘-Bresenham의 알고리즘과 동일한 환경.
Mark

3
wikipedia 페이지는 반으로 구워 져서 종이에 접근 할 수는 없지만 en.wikipedia.org/wiki/Xiaolin_Wu%27s_line_algorithm 이 고전입니다. 그러나 기본적인 인터넷 검색을 통해 쉽게 찾을 수 있기 때문에 게으른 질문처럼 느껴집니다.
yuriks

2
큰 소리로 생각하면 다중 픽셀 두께의 선을 그리는 데 Bresenham을 쉽게 적용 할 수 있어야합니다. 그런 다음 수학적 이상적인 선에서 각 픽셀 중심의 거리를 계산하고 일부 감소 기능을 적용하여 앤티 앨리어싱을 수행 할 수 있습니다.
Nathan Reed

2
그래도 의견을 올바른 것으로 표시 할 수는 없습니다.
Mark

답변:


9

앤티 앨리어싱 선을 그리는 비슷한 방법이 있습니까?

정의에 따라 앤티 앨리어싱 된 선이 더 많은 픽셀에 닿기 때문입니다. 이러한 알고리즘은 느려질 것입니다.


소프트웨어 래스터 라이저에서 앤티 앨리어싱 된 선을 그리는 유비쿼터스 방법은 Xiaolin Wu의 선 알고리즘 입니다. 구현하기가 어렵지 않으며 어쨌든 해당 링크에는 비정상적으로 고품질 의사 코드가 있습니다.

하드웨어 래스터 파이프에서 선 프리미티브는 기본 (또는 사용자 제공) 지오메트리 셰이더에 의해 화면 공간 쿼드로 확장 된 다음 두 개의 삼각형으로 그려지며 일반적인 방법으로 앤티 앨리어싱 될 수 있습니다.

레이트 레이서에는 다양한 옵션이 있습니다. 실제로 1D 객체를 그리는 방법에 대해 생각할 가치가 있습니다. 아마도 원통으로 (우 그림자!). 여기에는 원치 않는 (또는 아닐 수도있는) 원근감 / 단축 문제가 발생합니다. 명확한 일반화는 없습니다. 그런 다음, 무엇을 하든지 수퍼 샘플링하면됩니다.


"어쨌든 해당 링크에 비정상적으로 고품질 의사 코드가 있습니다"라고 동의하지 않습니다. 이 의사 코드는 웹의 수많은 장소에서 사용 된 것으로 보이지만 Wu의 알고리즘을 올바르게 구현하지는 않았을 것입니다. Wu의 원래 알고리즘은 양쪽 끝을 중심으로 안쪽으로 끌어 당겨 실제로 는 더 많은 픽셀에 쓰더라도 절반 정도의 작업을 수행하기 때문에 Bresenham보다 실제로 더 빠릅니다 . 나는 Wikipedia 기사에 게시 된 것이 아닌 Wu의 실제 알고리즘에 대해 이야기 하고 있습니다.
Octopus

@Octopus [특히 빠른 비트에서 모호한 회의론을 표현하지만 반박하거나 확인해야 할 맥락이 부족합니다. – 그렇다면, 출처, 수정 및 편집은 물론 환영합니다.]
imallett

당신이 계산하는 것에 따라 다릅니다. 양쪽 끝을 안쪽으로 그리면 Wu의 알고리즘은 계산의 절반이지만 픽셀 쓰기의 두 배입니다. Wikipedia에 링크 된 Wu의 논문에서 표 1을 참조하십시오. 따라서 직렬 연결에서 TFT에 쓸 때처럼 픽셀 쓰기가 비싸면 Wu의 알고리즘이 Bresenham보다 비쌉니다. (Bresenham의 알고리즘이 대칭을 사용할 수없는 이유를 알 수 없음을 인정해야합니다.)
Jan-Åke Larsson

1
그러나 @Octopus에 동의합니다. 심지어 "한 쪽 끝에서 다른 쪽 끝으로 그리기"를 허용하더라도 의사 코드는 정수 산술이 전체적으로 사용되는 경우에만 Wu의 알고리즘입니다. 내가 온라인에서 본 코드는 부동 소수점 산술을 사용하는데 이는 큰 변화입니다. Wu의 논문에서이 알고리즘은 정수 산술 (또는 실제로 고정 소수점 산술) 만 사용합니다.
Jan-Åke Larsson
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.