Antialiased линии

A

Anaxetus

Guest
Дали някой има добър код С до графиката някои "antialiased" линии.Ето някои линии с вълнение, около (както в аналогов обхват).
Той е предназначен да се използва в среда компютър програмиране.

С уважение,

 
Cyberszpiegostwo, prowadzone z dużym rozmachem kampanie cyberprzestępcze, a także głośne ataki hakerskie. Miniony rok upłynął pod znakiem wzrostu licz ...

Read more...
 
Опитайте с това ...

Предполагам, че:

В цвят (R, G, B) са поплавък в [0, 1] пространство (лесно можете да го промените в [0255])
VideoBuffer е "грозен Char * '(грозен Чар показалка) към RGB 8/8/8 = 24bit видео буфер
VideoDimX, VideoDimY е резолюцията Х и Y на VideoBufferКод:
нищожен WritePixel (CONST Int X, Y Конст Int,

Const поплавък R, Const поплавък г, Const б поплавък, Const алфа флоат)

(/ / 3 е за RGB 24bit deepth

грозен Char * pVideo = VideoBuffer (х (VideoDimX-(Y 1)) * VideoDimY) * 3;

pVideo [0] = (алфа * R) * 255 (1.0f-алфа) * pVideo [0];

pVideo [1] = (алфа * ж) * 255 (1.0f-алфа) * pVideo [1];

pVideo [2] = (алфа * B) * 255 (1.0f-алфа) * pVideo [2];

)нищожен LineAA (CONST Int x1, Const Int y1, Const Int x2, Const Int Конст Y2,

Const поплавък R, Const поплавък г, Const поплавък б)

(

/ / Полезен константи

Const поплавък DW = X2-X1;

Const поплавък DH = Y2-Y1;

поплавък SLX Const = DH / DW;

Const поплавък хитра DW = / DH;/ / Определя наклона

IF (функционални блокове въздушно пространство (SLX) <1.0)

(

/ / X сканиране

Int TX1 = x1;

Int TX2 = x2;

поплавък растерни = y1;ако (x1> x2)

(

TX1 = x2;

TX2 = x1;

растерни = Y2;

)за (INT х = TX1; х <= TX2; X )

(

Const Int Ri = Int (растерни);поплавък AlphaY0 Const = 1.0-(растер-ри);

поплавък AlphaY1 Const = 1.0-(RI 1- растерни);WritePixel (X, RI, R, G, B, AlphaY0);

WritePixel (X, RI 1, R, G, B, AlphaY1);растер = SLX;

)

)

в противен случай

(

/ / Год сканиране

Int ty1 = y1;

Int ty2 = Y2;

поплавък растерни = x1;ако (y1> y2)

(

ty1 = Y2;

ty2 = y1;

растерни = x2;

)за (INT Y = ty1; Y <= ty2; Y )

(

Const Int Ri = Int (растерни);поплавък AlphaX0 Const = 1.0-(растер-ри);

поплавък AlphaX1 Const = 1.0-(RI 1- растерни);WritePixel (RI, Y, R, G, B, AlphaX0);

WritePixel (RI 1, Y, R, G, B, AlphaX1);растер = лукав;

)

)

)
 
Друго нещо, което ...Спомням си, че съм го написах за обратната ДА VideoBuffer (като Windows DIB ... ляво -> надясно, надолу -> Up) ...VideoBuffer за "стандартна" рамка с произход в ляво горния десен (в ляво -> надясно, нагоре -> надолу) трябва да промените реда в предишния код ...

Код:грозен Char * pVideo = VideoBuffer (х (VideoDimX-(Y 1)) * VideoDimY) * 3;

 

Welcome to EDABoard.com

Sponsor

Back
Top