Alexander Burt - Inside of 2D-graphics

381
Двухмерная графика Александр Бурт ИЗНУТРИ

Transcript of Alexander Burt - Inside of 2D-graphics

Page 1: Alexander Burt - Inside of 2D-graphics

Двухмерная графика

Александр Бурт

ИЗНУТРИ

Page 2: Alexander Burt - Inside of 2D-graphics
Page 3: Alexander Burt - Inside of 2D-graphics
Page 4: Alexander Burt - Inside of 2D-graphics
Page 5: Alexander Burt - Inside of 2D-graphics
Page 6: Alexander Burt - Inside of 2D-graphics
Page 7: Alexander Burt - Inside of 2D-graphics
Page 8: Alexander Burt - Inside of 2D-graphics

ПЕЧАТЬ

Page 9: Alexander Burt - Inside of 2D-graphics

Полутоновый экран

Page 10: Alexander Burt - Inside of 2D-graphics

Углы экранов CMYK

Page 11: Alexander Burt - Inside of 2D-graphics
Page 12: Alexander Burt - Inside of 2D-graphics
Page 13: Alexander Burt - Inside of 2D-graphics

Центральная ямка

Page 14: Alexander Burt - Inside of 2D-graphics
Page 15: Alexander Burt - Inside of 2D-graphics
Page 16: Alexander Burt - Inside of 2D-graphics
Page 17: Alexander Burt - Inside of 2D-graphics
Page 18: Alexander Burt - Inside of 2D-graphics
Page 19: Alexander Burt - Inside of 2D-graphics
Page 20: Alexander Burt - Inside of 2D-graphics
Page 21: Alexander Burt - Inside of 2D-graphics
Page 22: Alexander Burt - Inside of 2D-graphics
Page 23: Alexander Burt - Inside of 2D-graphics

?

Page 24: Alexander Burt - Inside of 2D-graphics
Page 25: Alexander Burt - Inside of 2D-graphics
Page 26: Alexander Burt - Inside of 2D-graphics
Page 27: Alexander Burt - Inside of 2D-graphics
Page 28: Alexander Burt - Inside of 2D-graphics

𝑥

𝑦

𝑢

𝑣

𝑥=u+𝑣2

𝑦=√3𝑣2

𝑢=x−𝑦√3

𝑣=2𝑦√3

Page 29: Alexander Burt - Inside of 2D-graphics
Page 30: Alexander Burt - Inside of 2D-graphics
Page 31: Alexander Burt - Inside of 2D-graphics
Page 32: Alexander Burt - Inside of 2D-graphics
Page 33: Alexander Burt - Inside of 2D-graphics
Page 34: Alexander Burt - Inside of 2D-graphics
Page 35: Alexander Burt - Inside of 2D-graphics
Page 36: Alexander Burt - Inside of 2D-graphics

Формы пикселей

Page 37: Alexander Burt - Inside of 2D-graphics

Плюсы и минусы

Page 38: Alexander Burt - Inside of 2D-graphics

Плюсы и минусы

Y

X

Page 39: Alexander Burt - Inside of 2D-graphics

Плюсы и минусы

Y

X

Z

Page 40: Alexander Burt - Inside of 2D-graphics

Плюсы и минусы

Page 41: Alexander Burt - Inside of 2D-graphics

ПрямоугольныеПИКСЕЛИ

Page 42: Alexander Burt - Inside of 2D-graphics
Page 43: Alexander Burt - Inside of 2D-graphics
Page 44: Alexander Burt - Inside of 2D-graphics
Page 45: Alexander Burt - Inside of 2D-graphics

Соотношение сторон

𝑋

𝑌 :

Монитор 1.0

PAL 1.09

PAL Widescreen 1.46

NTSC 0.91

NTSC Widescreen 1.21

Anamorphic 2.0

Cinemascope 2.39

Page 46: Alexander Burt - Inside of 2D-graphics

ПИКСЕЛЬ?

ЧТОТАКОЕ

Page 47: Alexander Burt - Inside of 2D-graphics
Page 48: Alexander Burt - Inside of 2D-graphics
Page 49: Alexander Burt - Inside of 2D-graphics
Page 50: Alexander Burt - Inside of 2D-graphics
Page 51: Alexander Burt - Inside of 2D-graphics
Page 52: Alexander Burt - Inside of 2D-graphics
Page 53: Alexander Burt - Inside of 2D-graphics
Page 54: Alexander Burt - Inside of 2D-graphics
Page 55: Alexander Burt - Inside of 2D-graphics
Page 56: Alexander Burt - Inside of 2D-graphics
Page 57: Alexander Burt - Inside of 2D-graphics
Page 58: Alexander Burt - Inside of 2D-graphics
Page 59: Alexander Burt - Inside of 2D-graphics
Page 60: Alexander Burt - Inside of 2D-graphics
Page 61: Alexander Burt - Inside of 2D-graphics
Page 62: Alexander Burt - Inside of 2D-graphics
Page 63: Alexander Burt - Inside of 2D-graphics
Page 64: Alexander Burt - Inside of 2D-graphics
Page 65: Alexander Burt - Inside of 2D-graphics
Page 66: Alexander Burt - Inside of 2D-graphics
Page 67: Alexander Burt - Inside of 2D-graphics
Page 68: Alexander Burt - Inside of 2D-graphics
Page 69: Alexander Burt - Inside of 2D-graphics
Page 70: Alexander Burt - Inside of 2D-graphics
Page 71: Alexander Burt - Inside of 2D-graphics

ко ор ди

на ты

Page 72: Alexander Burt - Inside of 2D-graphics

𝑃 (𝑥 , 𝑦 )

𝑃 (𝑥 , 𝑦 )

Page 73: Alexander Burt - Inside of 2D-graphics

(4 ,3 ) (7 ,3 )

3

Page 74: Alexander Burt - Inside of 2D-graphics

Преобразование координат

масштаб вращение

смещениеперспективная

проекцияискажение

Page 75: Alexander Burt - Inside of 2D-graphics

�⃗� ′=�⃗� ·𝑀

𝑃

𝑃 ′

𝑀

(𝑥 ′𝑦 ′0 )=(𝑥𝑦0 )· (1 0 0

0 1 00 0 1)

Page 76: Alexander Burt - Inside of 2D-graphics

смещение

𝑇 ( 𝑥 , 𝑦 )=(1 0 𝑥0 1 𝑦0 0 1 )

Page 77: Alexander Burt - Inside of 2D-graphics

масштаб

S (𝑥 , 𝑦 )=(𝑥 0 00 𝑦 00 0 1)

Page 78: Alexander Burt - Inside of 2D-graphics

смещение

𝐻 (𝑠 )=(1 𝑠 00 1 00 0 1)

Page 79: Alexander Burt - Inside of 2D-graphics

вращение

𝑅 (𝜃 )=(c os𝜃 − sin𝜃 0sin 𝜃 c os𝜃 00 0 1)

Page 80: Alexander Burt - Inside of 2D-graphics

перспективнаяпроекция

Page 81: Alexander Burt - Inside of 2D-graphics

𝑃 (𝑃1 ,𝑃2 ,𝑃3 ,𝑃4 )=(𝑎 𝑑 𝑔𝑏 𝑒 h𝑐 𝑓 𝑖 )

𝑆=𝑃0−𝑃3+𝑃2−𝑃1

𝑔=

𝑆𝑥∆ 𝑦 2−𝑆𝑦∆ 𝑥2𝐷

𝑎=𝑥3−𝑥0+𝑔𝑥3

h=𝑆𝑦∆ 𝑥1−𝑆𝑥∆ 𝑦1

𝐷

𝑏=𝑥1−𝑥0+h 𝑥1𝑐=𝑥0𝑑=𝑦 3− 𝑦0+𝑔𝑦3𝑒=𝑦1− 𝑦0+h 𝑦1𝑓 =𝑦0

Page 82: Alexander Burt - Inside of 2D-graphics
Page 83: Alexander Burt - Inside of 2D-graphics

Р А СТ Е Р

И З АЦ И Я

Page 84: Alexander Burt - Inside of 2D-graphics

Сканлинии

Page 85: Alexander Burt - Inside of 2D-graphics

Сканлинии

Page 86: Alexander Burt - Inside of 2D-graphics
Page 87: Alexander Burt - Inside of 2D-graphics
Page 88: Alexander Burt - Inside of 2D-graphics

бин0с ь11

Page 89: Alexander Burt - Inside of 2D-graphics

byte b = 0xFF; // 8 битовushort w = 0xFFFF; // 16 битов

Page 90: Alexander Burt - Inside of 2D-graphics

00 302010 FF40 E0D0C0B0A09080706050 F0

?0 FEDCBA987654321

00 E0D0C0B0A0908070605040302010 F0 FF

Page 91: Alexander Burt - Inside of 2D-graphics

00 E0D0C0B0A0908070605040302010 F0 FF

0 FEDCBA987654321

00 FFEEDDCCBBAA998877665544332211FF

0000 FFFFEEEEDDDDCCCCBBBBAAAA999988887777666655554444333322221111

000 FFFEEEDDDCCCBBBAAA999888777666555444333222111 #fff ≡ #ffffff

F

Page 92: Alexander Burt - Inside of 2D-graphics

816

Page 93: Alexander Burt - Inside of 2D-graphics

byte b = 0x98;// 0x9800ushort w =

// 0x9898ushort w = (b << 8) | b;

b << 8;

Page 94: Alexander Burt - Inside of 2D-graphics

816

Page 95: Alexander Burt - Inside of 2D-graphics

(w + 0x80) >> 8;

ushort w = 0x98FF;

// 0x98byte b = w >> 8;

// 0x997F >> 8 = 0x99byte b =

Page 96: Alexander Burt - Inside of 2D-graphics

98FF

9796 98 99 9A

9666 9777 9888 9999 9AAA96EE 97FF 9911 9A22

Page 97: Alexander Burt - Inside of 2D-graphics

(w + 0x80) >> 8;

ushort w = 0x98FF;

// 0x98byte b = w >> 8;

// 0x997F >> 8 = 0x99byte b =

Page 98: Alexander Burt - Inside of 2D-graphics

// 0x9980 >> 8 = 0x99byte b =(w + 0x80) >> 8;

ushort w = 0x9900;

byte b = // 0x99w >> 8;

Page 99: Alexander Burt - Inside of 2D-graphics

9796 98 99 9A

9666 9777 9888 9999 9AAA96EE 97FF 9911 9A22

9900

Page 100: Alexander Burt - Inside of 2D-graphics

// 0x9980 >> 8 = 0x99byte b =(w + 0x80) >> 8;

ushort w = 0x9900;

byte b = w >> 8; // 0x99

Page 101: Alexander Burt - Inside of 2D-graphics

111

88

9796 98 99 9A

9666 9777 9888 9999 9AAA96EE 97FF 9911 9A22

Page 102: Alexander Burt - Inside of 2D-graphics

byte b = ((w & 0xF000) >> 8) | ((w & 0x0FFF) + 0x88) / 0x111;// 0x98

ushort w = 0x9900;

Page 103: Alexander Burt - Inside of 2D-graphics

0100 FF

0000..00FF...

FF00..FFFF

ushort w = 0x9900;byte b = w >> 8;byte b =(w + 0x80) >> 8;

Page 104: Alexander Burt - Inside of 2D-graphics

Imageclass Image{public: Image(uint width, uint height) : m_width(width) , m_height(height) { m_buffer = (pix8*)calloc(m_width * m_height, sizeof(pix8)); }

~Image() { free(m_buffer); }

uint GetWidth() { return m_width; } uint GetHeight() { return m_height; }

pix8* GetBuffer() const { return m_buffer; }

private: uint m_width; uint m_height;

pix8* m_buffer;};

Page 105: Alexander Burt - Inside of 2D-graphics

Graphicsclass Graphics{public: Graphics(Image* image) : m_image(image) {}

void FillRect(int x, int y, int width, int height, const Brush& brush); void DrawImage(int x, int y, Image* image, float opacity);

/* * * * * ...etc... * * * */

private: Image* m_image;};

Page 106: Alexander Burt - Inside of 2D-graphics
Page 107: Alexander Burt - Inside of 2D-graphics
Page 108: Alexander Burt - Inside of 2D-graphics
Page 109: Alexander Burt - Inside of 2D-graphics
Page 110: Alexander Burt - Inside of 2D-graphics
Page 111: Alexander Burt - Inside of 2D-graphics
Page 112: Alexander Burt - Inside of 2D-graphics
Page 113: Alexander Burt - Inside of 2D-graphics
Page 114: Alexander Burt - Inside of 2D-graphics
Page 115: Alexander Burt - Inside of 2D-graphics
Page 116: Alexander Burt - Inside of 2D-graphics
Page 117: Alexander Burt - Inside of 2D-graphics
Page 118: Alexander Burt - Inside of 2D-graphics
Page 119: Alexander Burt - Inside of 2D-graphics
Page 120: Alexander Burt - Inside of 2D-graphics
Page 121: Alexander Burt - Inside of 2D-graphics
Page 122: Alexander Burt - Inside of 2D-graphics
Page 123: Alexander Burt - Inside of 2D-graphics
Page 124: Alexander Burt - Inside of 2D-graphics
Page 125: Alexander Burt - Inside of 2D-graphics
Page 126: Alexander Burt - Inside of 2D-graphics
Page 127: Alexander Burt - Inside of 2D-graphics
Page 128: Alexander Burt - Inside of 2D-graphics
Page 129: Alexander Burt - Inside of 2D-graphics
Page 130: Alexander Burt - Inside of 2D-graphics
Page 131: Alexander Burt - Inside of 2D-graphics
Page 132: Alexander Burt - Inside of 2D-graphics
Page 133: Alexander Burt - Inside of 2D-graphics
Page 134: Alexander Burt - Inside of 2D-graphics

Единичный отрезок

[0,1 ]

0% 50% 100%

0 0.5 1

Page 135: Alexander Burt - Inside of 2D-graphics

𝐵=𝐴+𝑡 (𝐶− 𝐴 )

Интерполяция

A CB

Page 136: Alexander Burt - Inside of 2D-graphics

Целые числа

Page 137: Alexander Burt - Inside of 2D-graphics

float a = … ; // [0..1]float b = … ; // [0..1]

float c = a * b;

Page 138: Alexander Burt - Inside of 2D-graphics

int a = … ; // [0..255]int b = … ; // [0..255]

int c = a * b;

255×255=65025

Page 139: Alexander Burt - Inside of 2D-graphics

float fa = (float)a / 255.0;float fb = (float)b / 255.0;

int c = (int)((fa * ft) * 255.0);

Page 140: Alexander Burt - Inside of 2D-graphics

int MultInt(int a, int b){ return (a * b) / 255;}

Page 141: Alexander Burt - Inside of 2D-graphics

int MultInt(int a, int b){ return (a * b) >> 8; // (a * b) / 256}

65025256

=254.00390625

255×255=65025

Page 142: Alexander Burt - Inside of 2D-graphics

int MultInt(int a, int b){ return (a * b + 0x80) >> 8;}

255×255+128=6515365153256

=254.50390625

Page 143: Alexander Burt - Inside of 2D-graphics

int MultInt(int a, int b){ int temp = a * b + 0x80; return (temp + (temp >> 8)) >> 8;}

65153256

+65153

256=255.49806…

Page 144: Alexander Burt - Inside of 2D-graphics

Многабукф

Page 145: Alexander Burt - Inside of 2D-graphics

int a = … ; // [0..255]int b = … ; // [0..255]int t = … ; // [0..255]

int c = a + IntMult(b – a, t);

Page 146: Alexander Burt - Inside of 2D-graphics

int p1 = … ; // 0xAARRGGBBint p2 = … ; // 0xAARRGGBBint t = … ; // [0..255]

int r1 = (p1 >> 16) & 0xFF;int g1 = (p1 >> 8) & 0xFF;int b1 = (p1 ) & 0xFF;int a1 = (p1 >> 24) & 0xFF;

int r2 = (p2 >> 16) & 0xFF;int g2 = (p2 >> 8) & 0xFF;int b2 = (p2 ) & 0xFF;int a2 = (p2 >> 24) & 0xFF;

int r3 = r1 + MultInt(r2 – r1, t);int g3 = g1 + MultInt(g2 – g1, t);int b3 = b1 + MultInt(b2 – b1, t);int a3 = a1 + MultInt(a2 – a1, t);

int p3 = (r3 << 16) | (g3 << 8) | (b3 ) | (a3 << 24);

Page 147: Alexander Burt - Inside of 2D-graphics

union pix8{ int RGBA; struct { byte R, G, B, A };};

//// ...//

pix8& p1 = (pix8&)… ; // 0xAARRGGBBpix8& p2 = (pix8&)… ; // 0xAARRGGBBint t = … ; // [0..255]

pix8 p3;

p3.R = p1.R + MultInt(p2.R – p1.R, t);p3.G = p1.G + MultInt(p2.G – p1.G, t);p3.B = p1.B + MultInt(p2.B – p1.B, t);p3.A = p1.A + MultInt(p2.A – p1.A, t);

Page 148: Alexander Burt - Inside of 2D-graphics

Цветовые пространстваЦветовые пространства

Page 149: Alexander Burt - Inside of 2D-graphics

𝑅𝐺𝐵 𝐿𝑎𝑏 𝐻𝑆𝑉

𝐻𝑆𝐿𝐶𝑀𝑌𝐾

компонентные хроматические концептуальные

𝐿𝑎𝑏

𝑅𝐺𝐵

𝐻𝑆𝑉

Page 150: Alexander Burt - Inside of 2D-graphics

Распределение конусов

Page 151: Alexander Burt - Inside of 2D-graphics

CIE 1931 2° Стандартный наблюдатель

Page 152: Alexander Burt - Inside of 2D-graphics

𝐶𝐼𝐸 𝑋𝑌𝑍𝑋𝑌𝑍

Page 153: Alexander Burt - Inside of 2D-graphics

𝑥=𝑋

𝑋+𝑌+𝑍

𝑦=𝑌

𝑋+𝑌+𝑍

𝑧=𝑍

𝑋+𝑌+𝑍¿1−𝑥− 𝑦

%

%

%

𝑋=𝑌𝑦

𝑥

𝑍=𝑌𝑦

(1−𝑥−𝑦 )

Page 154: Alexander Burt - Inside of 2D-graphics

𝑥

𝑦

0 10

1

0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9

0.10.20.30.40.50.60.70.80.9

Гамут

Page 155: Alexander Burt - Inside of 2D-graphics

𝑥

𝑦

0 10

1

0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9

0.10.20.30.40.50.60.70.80.9

Гамут

𝑦=1−𝑥

Page 156: Alexander Burt - Inside of 2D-graphics

𝑥

𝑦

0 10

1

0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9

0.10.20.30.40.50.60.70.80.9

Гамут

( 13 , 13 , 13 )

Page 157: Alexander Burt - Inside of 2D-graphics

𝑥

𝑦

0 10

1

0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9

0.10.20.30.40.50.60.70.80.9

Гамут

спектральныйлокус

Page 158: Alexander Burt - Inside of 2D-graphics

𝑥

𝑦

0 10

1

0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9

0.10.20.30.40.50.60.70.80.9

Гамут

фиолетовый край

Page 159: Alexander Burt - Inside of 2D-graphics

𝑥

𝑦

0 10

1

0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9

0.10.20.30.40.50.60.70.80.9

Гамут

локус чёрного тела

Page 160: Alexander Burt - Inside of 2D-graphics

𝑥

𝑦

0 10

1

0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9

0.10.20.30.40.50.60.70.80.9

Гамут

8 битов

8 б

ито

в

8 битов

Page 161: Alexander Burt - Inside of 2D-graphics

𝑥

𝑦

0 10

1

0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9

0.10.20.30.40.50.60.70.80.9

Гамут

Page 162: Alexander Burt - Inside of 2D-graphics

R

G

B

R

G

B×0

Page 163: Alexander Burt - Inside of 2D-graphics

H

S

V

1-H

S

V

Page 164: Alexander Burt - Inside of 2D-graphics

𝑡=0 𝑡=1 𝑡=2

Page 165: Alexander Burt - Inside of 2D-graphics

(compositing)Компоновка

Page 166: Alexander Burt - Inside of 2D-graphics

𝐵

𝐴

𝐶¿𝛼 𝐴+𝛽𝐵

Page 167: Alexander Burt - Inside of 2D-graphics

𝐵

𝐴

𝐶¿ (1− 𝛽)𝛼 𝐴+𝛽𝐵

Page 168: Alexander Burt - Inside of 2D-graphics

Цвета

𝑅 𝐺 𝐵 𝛼[0,1 ] [0,1 ] [0,1 ] [0,1 ]

[0 ,𝛼 ] [0 ,𝛼 ] [0 ,𝛼 ] [0,1 ]¿𝛼 𝑅 ¿𝛼 𝐺 ¿𝛼 𝐵

неперемноженный

перемноженный

(unpremultiplied)

(premultiplied)

Перемножение

𝑅 ′ 𝐺 ′ 𝐵 ′ 𝛼

Page 169: Alexander Burt - Inside of 2D-graphics

Перемножение

𝐵

𝐴

𝐶=(1− 𝛽 )𝛼 𝐴+𝛽𝐵

Page 170: Alexander Burt - Inside of 2D-graphics

Перемножение

𝐵

𝐴

𝐶 ′¿ (1− 𝛽) 𝐴 ′+𝐵 ′

Page 171: Alexander Burt - Inside of 2D-graphics

Г р а д и е н т ыГ р а д и е н т ы

Page 172: Alexander Burt - Inside of 2D-graphics

2 цвета

𝐶0 𝐶1

𝐶𝑡

𝐶𝑡=𝐶0+𝑡 (𝐶1−𝐶0 )

Page 173: Alexander Burt - Inside of 2D-graphics

𝐶0 𝐶1

𝐶𝑡

𝐶𝑡=𝐶𝑎+𝑡 ′ (𝐶𝑏−𝐶𝑎) ,𝑎<𝑡 ′<𝑏

𝐶𝑎 𝐶𝑏

𝑡′=𝑡−𝑎𝑏−𝑎

4 цвета

Page 174: Alexander Burt - Inside of 2D-graphics

𝑃0

𝑃1

𝑃 𝑡

линейный

𝑃0

𝑃1

𝑃 𝑡𝑃0

𝑃1

𝑃 𝑡t

t t

радиальный угловой

Page 175: Alexander Burt - Inside of 2D-graphics
Page 176: Alexander Burt - Inside of 2D-graphics

smoothness  = 0%

smoothness = 100%

Page 177: Alexander Burt - Inside of 2D-graphics

smoothness  = 0%

smoothness = 100%

Page 178: Alexander Burt - Inside of 2D-graphics

𝐿 (𝐶 )=𝐶0+𝑡 (𝐶1−𝐶0 )

𝑆 (𝐶 )=𝐶0+(𝑡+0.42( 1−cos (𝜋𝑡 )2

−𝑡)) (𝐶1−𝐶0 )

smoothness = 100%

Page 179: Alexander Burt - Inside of 2D-graphics

ИзображенияИзображения

Page 180: Alexander Burt - Inside of 2D-graphics

Интерполяция

Page 181: Alexander Burt - Inside of 2D-graphics
Page 182: Alexander Burt - Inside of 2D-graphics
Page 183: Alexander Burt - Inside of 2D-graphics

𝐶0,0 𝐶1,0

𝐶0,1 𝐶1,1

𝐶

Page 184: Alexander Burt - Inside of 2D-graphics

𝑡

Page 185: Alexander Burt - Inside of 2D-graphics

¿ +¿+¿𝐶 ′

𝐶 ′ ′

𝐶 ′

𝐶 ′ ′

𝐶

Page 186: Alexander Burt - Inside of 2D-graphics

𝐶 ′=𝐶0,0+𝑡𝑥 (𝐶1,0−𝐶0,0 )

𝐶 ′ ′=𝐶0,1+𝑡𝑥 (𝐶1,1−𝐶0,1 )

𝐶=𝐶 ′+𝑡 𝑦 ( 𝐶 ′ ′ −𝐶 ′ )

Page 187: Alexander Burt - Inside of 2D-graphics

𝐶

𝐶0,0 𝐶1,0 𝐶2,0 𝐶3,0

𝐶0,1 𝐶1,1 𝐶2,1 𝐶3,1

𝐶0,2 𝐶1,2 𝐶2,2 𝐶3,2

𝐶0,3 𝐶1,3 𝐶2,3 𝐶3,3

Page 188: Alexander Burt - Inside of 2D-graphics

𝑡

Page 189: Alexander Burt - Inside of 2D-graphics

антиалиасингНарочный

Page 190: Alexander Burt - Inside of 2D-graphics
Page 191: Alexander Burt - Inside of 2D-graphics
Page 192: Alexander Burt - Inside of 2D-graphics
Page 193: Alexander Burt - Inside of 2D-graphics
Page 194: Alexander Burt - Inside of 2D-graphics
Page 195: Alexander Burt - Inside of 2D-graphics
Page 196: Alexander Burt - Inside of 2D-graphics
Page 197: Alexander Burt - Inside of 2D-graphics
Page 198: Alexander Burt - Inside of 2D-graphics

0+0.5 (1−0 )=0.50.5+0.5 (1−0.5 )=0.75

0.5

0.50.50.75

Page 199: Alexander Burt - Inside of 2D-graphics
Page 200: Alexander Burt - Inside of 2D-graphics

≥1𝑝𝑥

Page 201: Alexander Burt - Inside of 2D-graphics
Page 202: Alexander Burt - Inside of 2D-graphics
Page 203: Alexander Burt - Inside of 2D-graphics

узоры

Page 204: Alexander Burt - Inside of 2D-graphics

Шейдеры

Page 205: Alexander Burt - Inside of 2D-graphics

class ColorBrush : Brush{public: ColorBrush(const Color& color) : m_color(color) {}

// virtual void FillScanline(Image& img, int y, int[] edges) { assert(edges.Count % 2 == 0);

for (int i = 0; i < edges.Count; i += 2) { for (int x = edges[i]; x < edges[i + 1]; x++) { pix8& pix = img.Buffer[y * img.Width + x]; pix = Over(pix8(m_color), pix); } } {

private: Color m_color;};

Page 206: Alexander Burt - Inside of 2D-graphics

BrushColor BrushGradient BrushLinear Gradient BrushRadial Gradient BrushAngular Gradient Brush

Pattern BrushNoise Brush...

Page 207: Alexander Burt - Inside of 2D-graphics

Векторная

графика

Page 208: Alexander Burt - Inside of 2D-graphics

Полигоны

1

2

3

4

5

6

Page 209: Alexander Burt - Inside of 2D-graphics
Page 210: Alexander Burt - Inside of 2D-graphics
Page 211: Alexander Burt - Inside of 2D-graphics
Page 212: Alexander Burt - Inside of 2D-graphics
Page 213: Alexander Burt - Inside of 2D-graphics
Page 214: Alexander Burt - Inside of 2D-graphics
Page 215: Alexander Burt - Inside of 2D-graphics
Page 216: Alexander Burt - Inside of 2D-graphics
Page 217: Alexander Burt - Inside of 2D-graphics
Page 218: Alexander Burt - Inside of 2D-graphics
Page 219: Alexander Burt - Inside of 2D-graphics
Page 220: Alexander Burt - Inside of 2D-graphics
Page 221: Alexander Burt - Inside of 2D-graphics
Page 222: Alexander Burt - Inside of 2D-graphics
Page 223: Alexander Burt - Inside of 2D-graphics

Чётное-нечётное

Page 224: Alexander Burt - Inside of 2D-graphics

Чётное-нечётное

Page 225: Alexander Burt - Inside of 2D-graphics
Page 226: Alexander Burt - Inside of 2D-graphics

Ненулевая намотка

Page 227: Alexander Burt - Inside of 2D-graphics

Толстыелинии

Page 228: Alexander Burt - Inside of 2D-graphics
Page 229: Alexander Burt - Inside of 2D-graphics

Концытупые

квадратные

круглые

Page 230: Alexander Burt - Inside of 2D-graphics

Опять координаты

void DrawLine(FPoint p1, FPoint p2, float width){ p1 += FPoint(0.5, 0.5); p2 += FPoint(0.5, 0.5);

// ...}

DrawLine(FPoint(3, 2), FPoint(12, 2), 1);

Page 231: Alexander Burt - Inside of 2D-graphics

Опять координаты

void DrawLine(FPoint p1, FPoint p2, float width){ p1 += FPoint(0.5, 0.5); p2 += FPoint(0.5, 0.5);

// ...}

DrawLine(FPoint(3, 2), FPoint(12, 2), 2);

Page 232: Alexander Burt - Inside of 2D-graphics

Опять координаты

void DrawLine(FPoint p1, FPoint p2, float width){ p1 += FPoint(0.5, 0.5); p2 += FPoint(0.5, 0.5);

// ...}

DrawLine(FPoint(3.5, 1.5), FPoint(11.5, 1.5), 2);

Page 233: Alexander Burt - Inside of 2D-graphics

Опять координаты

void DrawLine(FPoint p1, FPoint p2, float width){ // ...}

DrawLine(FPoint(3, 2), FPoint(13, 2), 2);

Page 234: Alexander Burt - Inside of 2D-graphics

Опять координаты

void DrawLine(FPoint p1, FPoint p2, float width){ // ...}

DrawLine(FPoint(3, 2), FPoint(13, 2), 1);

Page 235: Alexander Burt - Inside of 2D-graphics

Опять координаты

void DrawLine(FPoint p1, FPoint p2, float width){ // ...}

DrawLine(FPoint(3, 2.5), FPoint(13, 2.5), 1);

Page 236: Alexander Burt - Inside of 2D-graphics

Толстые полилинии

Page 237: Alexander Burt - Inside of 2D-graphics

Стыки

фасковый угольный круглый

Page 238: Alexander Burt - Inside of 2D-graphics

Фасковый стык

Page 239: Alexander Burt - Inside of 2D-graphics

Фасковый стык

Page 240: Alexander Burt - Inside of 2D-graphics

Круглый стык

Page 241: Alexander Burt - Inside of 2D-graphics

Круглый стык

Page 242: Alexander Burt - Inside of 2D-graphics

Угольный стык

Page 243: Alexander Burt - Inside of 2D-graphics

Угольный стык

Page 244: Alexander Burt - Inside of 2D-graphics

Угольный стык

Page 245: Alexander Burt - Inside of 2D-graphics

Угольный стык

Page 246: Alexander Burt - Inside of 2D-graphics

Митровое соотношение

𝑤

𝑙

𝑀=𝑙𝑤

Page 247: Alexander Burt - Inside of 2D-graphics

Митровый лимит

𝑀 ≤ 4

Page 248: Alexander Burt - Inside of 2D-graphics

Митровый лимит

𝑀 ≤2

Page 249: Alexander Burt - Inside of 2D-graphics

Митровое соотношение (WPF)

𝑤

𝑙

𝑀=2 𝑙𝑤

Page 250: Alexander Burt - Inside of 2D-graphics

Митровый лимит (WPF)

𝑀 ≤2

Page 251: Alexander Burt - Inside of 2D-graphics

Толстые полилинии

Page 252: Alexander Burt - Inside of 2D-graphics

Толстые полилинии

Page 253: Alexander Burt - Inside of 2D-graphics

Толстые полилинии

Page 254: Alexander Burt - Inside of 2D-graphics

Толстые полилинии

Page 255: Alexander Burt - Inside of 2D-graphics

Т о н к и е л и н и и

Page 256: Alexander Burt - Inside of 2D-graphics

1 px

Page 257: Alexander Burt - Inside of 2D-graphics

<1 px 1 px

Page 258: Alexander Burt - Inside of 2D-graphics
Page 259: Alexander Burt - Inside of 2D-graphics
Page 260: Alexander Burt - Inside of 2D-graphics
Page 261: Alexander Burt - Inside of 2D-graphics

float _width = max(1, width);

float _opacity = width < 1 ? opacity * width : opacity;

DrawLine(..., _width, _opacity);

Page 262: Alexander Burt - Inside of 2D-graphics

Сплайны

Page 263: Alexander Burt - Inside of 2D-graphics
Page 264: Alexander Burt - Inside of 2D-graphics
Page 265: Alexander Burt - Inside of 2D-graphics
Page 266: Alexander Burt - Inside of 2D-graphics
Page 267: Alexander Burt - Inside of 2D-graphics
Page 268: Alexander Burt - Inside of 2D-graphics
Page 269: Alexander Burt - Inside of 2D-graphics
Page 270: Alexander Burt - Inside of 2D-graphics
Page 271: Alexander Burt - Inside of 2D-graphics
Page 272: Alexander Burt - Inside of 2D-graphics
Page 273: Alexander Burt - Inside of 2D-graphics
Page 274: Alexander Burt - Inside of 2D-graphics

𝑃0

𝑃1

𝑃01

𝑃01=𝑃0+𝑡 (𝑃1−𝑃0 )

Кривые

Page 275: Alexander Burt - Inside of 2D-graphics

𝑃01=𝑃0+𝑡 (𝑃1−𝑃0 )

𝑃01=(1−𝑡 )𝑃0+𝑡 𝑃1

𝑃01=( 𝑃1−𝑃0 )𝑡+𝑃0

¿𝑃0+𝑡 𝑃1−𝑡 𝑃0

знаем P01, какой t?

знаем t, какая P01?

Page 276: Alexander Burt - Inside of 2D-graphics

𝑃01=(1−𝑡 )𝑃0+𝑡 𝑃1

// float t

float _1mt = 1 – t;

p01.X = _1mt * p0.X + t * p1.X;p01.Y = _1mt * p0.Y + t * p1.Y;

Page 277: Alexander Burt - Inside of 2D-graphics

𝑃01=( 𝑃1−𝑃0 )𝑡+𝑃0

Page 278: Alexander Burt - Inside of 2D-graphics

𝑃01=( 𝑃1−𝑃0 )𝑡+𝑃0

𝑎𝑡+𝑏=0 ,𝑎=𝑃1−𝑃0

𝑏=𝑃0−𝑃01

𝑡=−𝑏𝑎,𝑎≠0

Page 279: Alexander Burt - Inside of 2D-graphics

𝑃01=( 𝑃1−𝑃0 )𝑡+𝑃0

𝑎𝑡+𝑏=0 ,𝑎=𝑃1−𝑃0

𝑏=𝑃0−𝑃01

𝑡=−𝑏𝑎,𝑎≠0

Page 280: Alexander Burt - Inside of 2D-graphics

𝑃01=𝑃0+𝑡 (𝑃1−𝑃0 )

𝑃0

𝑃1

𝑃01

𝑃2

𝑃12

𝑃012

𝑃12=𝑃1+𝑡 (𝑃2−𝑃1 )𝑃012=𝑃01+𝑡 (𝑃12− 𝑃01 )

Кривые

Page 281: Alexander Burt - Inside of 2D-graphics

𝑃012=𝑃01+𝑡 (𝑃12− 𝑃01 )¿𝑃0+𝑡 (𝑃1−𝑃0 )+𝑡 ( 𝑃1+𝑡 ( 𝑃2−𝑃1 )−𝑃0− 𝑡 (𝑃1−𝑃0 ))¿𝑃0+𝑡 𝑃1−𝑡 𝑃0+𝑡 𝑃1+𝑡 2𝑃2−𝑡2 𝑃1− 𝑡 𝑃0− 𝑡2 𝑃1+𝑡 2𝑃0

𝑃12=𝑃1+𝑡 (𝑃2−𝑃1 )𝑃01=𝑃0+𝑡 (𝑃1−𝑃0 )

𝑃012=(𝑡−1 )2𝑃0−2 𝑡 (𝑡−1 ) 𝑃1+𝑡2𝑃2

𝑃012=( 𝑃2−2𝑃1+𝑃0 ) 𝑡 2−2 (𝑃1−𝑃0 ) 𝑡+𝑃0

Page 282: Alexander Burt - Inside of 2D-graphics

𝑃012=(𝑡−1 )2𝑃0−2 𝑡 (𝑡−1 ) 𝑃1+𝑡2𝑃2

// float t

float tm1 = t – 1;float t2 = t * t;float tm12 = tm1 * tm1;float _2ttm1 = 2 * t * tm1;

p012.X = tm12 * p0.X – _2ttm1 * p1.X + t2 * p2.X;p012.Y = tm12 * p0.Y – _2ttm1 * p1.Y + t2 * p2.Y;

Page 283: Alexander Burt - Inside of 2D-graphics

𝑃012=( 𝑃2−2𝑃1+𝑃0 ) 𝑡 2−2 (𝑃1−𝑃0 ) 𝑡+𝑃0

Page 284: Alexander Burt - Inside of 2D-graphics

𝑃012=( 𝑃2−2𝑃1+𝑃0 ) 𝑡 2−2 (𝑃1−𝑃0 ) 𝑡+𝑃0

𝑎𝑡 2+𝑏𝑡+𝑐=0 ,𝑎=𝑃2−2𝑃1+𝑃0

𝑏=2 (𝑃0−𝑃1 )𝑐=𝑃0−𝑃012

𝑡1,2=−𝑏±√𝑏2−4𝑎𝑐

2𝑎,𝑎≠0

Page 285: Alexander Burt - Inside of 2D-graphics

𝑃012=( 𝑃2−2𝑃1+𝑃0 ) 𝑡 2−2 (𝑃1−𝑃0 ) 𝑡+𝑃0

𝑎𝑡 2+𝑏𝑡+𝑐=0 ,𝑎=𝑃2−2𝑃1+𝑃0

𝑏=2 (𝑃0−𝑃1 )𝑐=𝑃0−𝑃012

𝑡1,2=−𝑏±√𝑏2−4𝑎𝑐

2𝑎,𝑎≠0

Page 286: Alexander Burt - Inside of 2D-graphics

𝑃01=𝑃0+𝑡 (𝑃1−𝑃0 )

𝑃0

𝑃1

𝑃01

𝑃2𝑃12

𝑃012

𝑃12=𝑃1+𝑡 (𝑃2−𝑃1 )

𝑃123=𝑃12+𝑡 (𝑃23−𝑃12 )𝑃3

𝑃23

𝑃123

𝑃012 3𝑃23=𝑃2+𝑡 (𝑃3−𝑃2 )𝑃012=𝑃01+𝑡 (𝑃12− 𝑃01 )

𝑃0123=𝑃012+𝑡 (𝑃123− 𝑃012)

Кривые

Page 287: Alexander Burt - Inside of 2D-graphics

𝑃0123=(1−𝑡 )3𝑃0+3𝑡 (1−𝑡 )2𝑃1+3 𝑡2 (1−𝑡 )𝑃2+𝑡 3𝑃3

𝑃01=𝑃0+𝑡 (𝑃1−𝑃0 )𝑃12=𝑃1+𝑡 (𝑃2−𝑃1 )

𝑃12 3=𝑃12+𝑡 (𝑃23−𝑃12 )

𝑃23=𝑃2+𝑡 (𝑃3−𝑃2 )𝑃012=𝑃01+𝑡 (𝑃12− 𝑃01 )

𝑃012 3=𝑃012+𝑡 (𝑃123− 𝑃012)¿𝑃01+𝑡 (𝑃12−𝑃01 )+𝑡 ( 𝑃12+𝑡 ( 𝑃23−𝑃12 )−𝑃01− 𝑡 (𝑃12−𝑃01) )

¿𝑃0+𝑡 (𝑃1−𝑃0 )+𝑡 ( 𝑃1+𝑡 ( 𝑃2−𝑃1 )−𝑃0− 𝑡 (𝑃1−𝑃0 ))+𝑡 (𝑃1+𝑡 ( 𝑃2−𝑃1 )+𝑡 (𝑃2+𝑡 ( 𝑃3−𝑃2 )−𝑃1−𝑡 (𝑃2−𝑃1) )−𝑃0−𝑡 ( 𝑃1−𝑃0 )−𝑡 ( 𝑃1+𝑡 (𝑃2−𝑃1 )−𝑃0−𝑡 (𝑃1−𝑃0 ) ))¿𝑃0+𝑡 𝑃1−𝑡 𝑃0+𝑡 𝑃1+𝑡 2𝑃2−𝑡2 𝑃1− 𝑡 𝑃0− 𝑡2 𝑃1+𝑡 2𝑃0+𝑡 𝑃1+𝑡 2𝑃2−𝑡 2𝑃1+𝑡 2𝑃2+𝑡3 𝑃3−𝑡 3𝑃2−𝑡 2𝑃1− 𝑡3 𝑃2+𝑡3 𝑃1− 𝑡 𝑃0− 𝑡2 𝑃1+𝑡 2𝑃 0−𝑡 2𝑃1−𝑡 3𝑃2+𝑡 3𝑃1+𝑡 2𝑃0+𝑡 3 𝑃1−𝑡 3𝑃0

𝑃0123=( 𝑃3−3𝑃2+3𝑃1−𝑃0 )𝑡 3+3 ( 𝑃2−2𝑃1+𝑃0 ) 𝑡 2+3 (𝑃1−𝑃0 ) 𝑡+𝑃0

Page 288: Alexander Burt - Inside of 2D-graphics

// float t

float t2 = t * 2;float t3 = t2 * t;float _1mt = 1 – t;float _1mt2 = _1mt * _1mt;float _1mt3 = _1mt2 * _1mt;float _3t_1mt2 = 3 * t * _1mt2;float _3t2_1mt = 3 * t2 * _1mt;

p0123.X = _1mt3 * p0.X – _3t_1mt2 * p1.X + _3t2_1mt * p2.X + t3 * p3.X;p0123.Y = _1mt3 * p0.Y – _3t_1mt2 * p1.Y + _3t2_1mt * p2.Y + t3 * p3.Y;

𝑃0123=(1−𝑡 )3𝑃0+3𝑡 (1−𝑡 )2𝑃1+3 𝑡2 (1−𝑡 )𝑃2+𝑡 3𝑃3

Page 289: Alexander Burt - Inside of 2D-graphics

𝑎𝑡 3+𝑏𝑡 2+𝑐𝑡+𝑑=0 ,𝑏=3 (𝑃 2−2𝑃1+𝑃0 )𝑐=3 (𝑃0− 𝑃1 )𝑑=𝑃0− 𝑃0123

𝑃0123=( 𝑃3−3𝑃2+3𝑃1−𝑃0 )𝑡 3+3 ( 𝑃2−2𝑃1+𝑃0 ) 𝑡 2+3 (𝑃1− 𝑃0 ) 𝑡+𝑃0

𝑎=𝑃3−3𝑃2+3𝑃1+𝑃0

𝑎≠ 0

Page 290: Alexander Burt - Inside of 2D-graphics

𝑎𝑡 3+𝑏𝑡 2+𝑐𝑡+𝑑=0 ,𝑏=3 (𝑃 2−2𝑃1+𝑃0 )𝑐=3 (𝑃0− 𝑃1 )𝑑=𝑃0− 𝑃0123

𝑃0123=( 𝑃3−3𝑃2+3𝑃1−𝑃0 )𝑡 3+3 ( 𝑃2−2𝑃1+𝑃0 ) 𝑡 2+3 (𝑃1− 𝑃0 ) 𝑡+𝑃0

𝑎=𝑃3−3𝑃2+3𝑃1+𝑃0

𝑎≠ 0

Page 291: Alexander Burt - Inside of 2D-graphics

𝑏′=𝑏𝑎 ,𝑎≠0𝑐 ′=

𝑐𝑎𝑑′=

𝑑𝑎

𝑞=𝑏 ′2−3𝑐 ′9

𝑟=2𝑏 ′3−9𝑏 ′𝑐 ′+27𝑑 ′

54

𝜃=cos− 1( 𝑟

√𝑞3 )𝑡1=−2√𝑞cos (𝜃3 )− 𝑏′

3

𝑡 2,3=−2√𝑞 cos( 𝜃±2𝜋3 )− 𝑏 ′3

𝑠=−𝑟|𝑟|

|3√|𝑟|+√𝑟 2−𝑞3| 𝑢={0если𝑠=0 ,𝑞𝑠если 𝑠≠0.

𝑡1=𝑠+𝑢−𝑏 ′3

𝑡 2=−𝑠+𝑢2−

𝑏′

3,𝑠=𝑢

,𝑟2<𝑞3

Page 292: Alexander Burt - Inside of 2D-graphics

ûü ûû

Метод Ньютона

Page 293: Alexander Burt - Inside of 2D-graphics

Метод Ньютона

Page 294: Alexander Burt - Inside of 2D-graphics

Метод Ньютона

Page 295: Alexander Burt - Inside of 2D-graphics

Геометрическиеформы

Page 296: Alexander Burt - Inside of 2D-graphics

Круги/эллипсы

Page 297: Alexander Burt - Inside of 2D-graphics

𝑟 𝑥

𝑟 𝑦 κ  𝑟 𝑥

κ=43

(√2−1 )≈0.5523

κ  𝑟 𝑦

Page 298: Alexander Burt - Inside of 2D-graphics

Арки

κ=43tan

𝜃4

𝜃

Page 299: Alexander Burt - Inside of 2D-graphics

𝜃>𝜋2

Page 300: Alexander Burt - Inside of 2D-graphics

Закруглённые углы

¿+¿

Page 301: Alexander Burt - Inside of 2D-graphics

Синусоиды

κ≈12.74

≈0.36496

Page 302: Alexander Burt - Inside of 2D-graphics

Сглаживание

(antialiasing)

Page 303: Alexander Burt - Inside of 2D-graphics

Аналитическое сглаживание

%

Page 304: Alexander Burt - Inside of 2D-graphics

Аналитическое сглаживание

Page 305: Alexander Burt - Inside of 2D-graphics

Аналитическое сглаживание

Page 306: Alexander Burt - Inside of 2D-graphics
Page 307: Alexander Burt - Inside of 2D-graphics

0414344444442404

Page 308: Alexander Burt - Inside of 2D-graphics

0414344444442404

Page 309: Alexander Burt - Inside of 2D-graphics

С УБПИКСЕЛИ

Page 310: Alexander Burt - Inside of 2D-graphics
Page 311: Alexander Burt - Inside of 2D-graphics
Page 312: Alexander Burt - Inside of 2D-graphics
Page 313: Alexander Burt - Inside of 2D-graphics
Page 314: Alexander Burt - Inside of 2D-graphics

1

13

13

13

39

29

29

19

19

Page 315: Alexander Burt - Inside of 2D-graphics

11 1

33

23

23

13

13

79

69

69

39

3919

19

Page 316: Alexander Burt - Inside of 2D-graphics
Page 317: Alexander Burt - Inside of 2D-graphics
Page 318: Alexander Burt - Inside of 2D-graphics

Облом с прозрачностью

Page 319: Alexander Burt - Inside of 2D-graphics

Расположение субпикселей

Page 320: Alexander Burt - Inside of 2D-graphics

RGB (горизонтально)

Page 321: Alexander Burt - Inside of 2D-graphics

RGB (вертикально)

Page 322: Alexander Burt - Inside of 2D-graphics

RGB (TV)

Page 323: Alexander Burt - Inside of 2D-graphics
Page 324: Alexander Burt - Inside of 2D-graphics

Bayer

Page 325: Alexander Burt - Inside of 2D-graphics

Hexagonal

Page 326: Alexander Burt - Inside of 2D-graphics

PenTile RBG-GBR

Page 327: Alexander Burt - Inside of 2D-graphics

PenTile RG-B-GR

Page 328: Alexander Burt - Inside of 2D-graphics

Текст

Page 329: Alexander Burt - Inside of 2D-graphics

ШрифтыШрифтыШрифты

Page 330: Alexander Burt - Inside of 2D-graphics

С

Page 331: Alexander Burt - Inside of 2D-graphics

Faux italic

a a

Page 332: Alexander Burt - Inside of 2D-graphics

Faux italic

a a

Page 333: Alexander Burt - Inside of 2D-graphics

aFaux italic

a

Page 334: Alexander Burt - Inside of 2D-graphics

ПРОТИВНАЯ ГАММАПРОТИВНАЯ ГАММАПРОТИВНАЯ ГАММА

ПРОТИВНАЯ ГАММАПРОТИВНАЯ ГАММАПРОТИВНАЯ ГАММА

ПРОТИВНАЯ ГАММА

ПРОТИВНАЯ ГАММАПРОТИВНАЯ ГАММА

γ

Page 335: Alexander Burt - Inside of 2D-graphics

Контрастность зрения

100:1*

* Вообще-то 1000:1, но типичные условия не позволяют

Page 336: Alexander Burt - Inside of 2D-graphics

Порог различения

Y0

Y Y+ΔY

ΔY ≈ 0.01

Page 337: Alexander Burt - Inside of 2D-graphics

Сколько нужно битов?

log 1 .01100≈ 463

1000 .01

=1000014 битов

9 битов*

* 8 :)то есть

Page 338: Alexander Burt - Inside of 2D-graphics

Сколько нужно битов?

2568 битов

Page 339: Alexander Burt - Inside of 2D-graphics

Проблема кода 100

101100

=1.01

0 · · · · · · · · · · · · · · · · · · · · 255201200

=1.0055150

=1.02

не хватает

лишние

Δ ≈ 0.01

Page 340: Alexander Burt - Inside of 2D-graphics

Проблема кода 100

не хватает

лишние

Page 341: Alexander Burt - Inside of 2D-graphics

𝐶=𝐿𝛾

𝐿=𝐶1𝛾

C – CorrectedL – Linear

Page 342: Alexander Burt - Inside of 2D-graphics

Путь света

свет

гаммакамеры

8-bitRGB

дегамма гамма

16-bitRGB

16-bitRGB

8-bitRGB

гаммамонитора

свет

«гамма»глаз

зрение

?𝛾 𝛾 𝛾 𝛾

Page 343: Alexander Burt - Inside of 2D-graphics

𝐶=𝐿𝛾

𝐿=𝐶1𝛾

C – CorrectedL – Linear

Page 344: Alexander Burt - Inside of 2D-graphics

для наших глаз свет более светлый, чем темнота тёмная свет более светлый

Page 345: Alexander Burt - Inside of 2D-graphics

Калибрация

0.8

Page 346: Alexander Burt - Inside of 2D-graphics

Калибрация

1.0

Page 347: Alexander Burt - Inside of 2D-graphics

Калибрация

1.2

Page 348: Alexander Burt - Inside of 2D-graphics

Калибрация

1.4

Page 349: Alexander Burt - Inside of 2D-graphics

Калибрация

1.6

Page 350: Alexander Burt - Inside of 2D-graphics

Калибрация

1.8

Page 351: Alexander Burt - Inside of 2D-graphics

Калибрация

2.0

Page 352: Alexander Burt - Inside of 2D-graphics

Калибрация

2.2

Page 353: Alexander Burt - Inside of 2D-graphics
Page 354: Alexander Burt - Inside of 2D-graphics
Page 355: Alexander Burt - Inside of 2D-graphics
Page 356: Alexander Burt - Inside of 2D-graphics
Page 357: Alexander Burt - Inside of 2D-graphics
Page 358: Alexander Burt - Inside of 2D-graphics

R G B

1

0R G BR G B

Page 359: Alexander Burt - Inside of 2D-graphics
Page 360: Alexander Burt - Inside of 2D-graphics
Page 361: Alexander Burt - Inside of 2D-graphics
Page 362: Alexander Burt - Inside of 2D-graphics
Page 363: Alexander Burt - Inside of 2D-graphics
Page 364: Alexander Burt - Inside of 2D-graphics
Page 365: Alexander Burt - Inside of 2D-graphics
Page 366: Alexander Burt - Inside of 2D-graphics
Page 367: Alexander Burt - Inside of 2D-graphics
Page 368: Alexander Burt - Inside of 2D-graphics
Page 369: Alexander Burt - Inside of 2D-graphics

Разброс(dithering)

Page 370: Alexander Burt - Inside of 2D-graphics
Page 371: Alexander Burt - Inside of 2D-graphics

порогслучайность

полутон

распыление

Bayer

Floyd-Steinberg

Page 372: Alexander Burt - Inside of 2D-graphics
Page 373: Alexander Burt - Inside of 2D-graphics
Page 374: Alexander Burt - Inside of 2D-graphics

Оптимизация

Page 375: Alexander Burt - Inside of 2D-graphics

Выбор языка

С (недоС++)

Page 376: Alexander Burt - Inside of 2D-graphics

MMX

Page 377: Alexander Burt - Inside of 2D-graphics

Исключение как правило

Page 378: Alexander Burt - Inside of 2D-graphics

GetPixel(int x, int y);SetPixel(int x, int y, int color);

pix8* buffer = image->GetBuffer();int imageWidth = image->GetWidth();

...buffer[y * imageWidth + x]...

Page 379: Alexander Burt - Inside of 2D-graphics

if (...){

}else{

}

int c = min(a, b); // c = a < b ? a : bint c = a + (((b - a) >> 31) & (b - a));

Page 380: Alexander Burt - Inside of 2D-graphics

int b = a / 3;int b = (int)(((__int64)a * 0x55555556) >> 32);

Page 381: Alexander Burt - Inside of 2D-graphics

Устали?