Штриховка полигонов



Штриховка полигонов

Теперь применим штриховку (stipple) к полигонам. Режим штриховки включается и выключается стандартным способом:

glEnable (GL_POLYGON_STIPPLE) ;

glDisable (GL_POLYGON_STIPPLE);

Bitmap-узор (pattern) штриховки надо предварительно подготовить в массиве такой размерности, чтобы заполнить bitmap площадью 32x32 = 1024 пиксела. Размерность массива с узором определяется так: 1024 бита можно разместить в 128 переменных по одному байту. Мы разместим их в 16 строках по 8 байт. Имеем 16 х х 8 х 8 = 1024 бита (или пиксела).

Массивы объявлены глобально. Адреса массивов с узором подаются на вход функции glPolygonStipple:

GLubyte gSpade[] = // Узор - пики

{

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0xlf, 0xff, Oxff, 0xf8, 0xlf, 0x00, 0x00, 0xf8,



0x01, OxcO, 0x03, 0x80, 0x00, 0x70, 0xOe, 0x00,

0x00,

0x20,

0x04,

0x00,

0x00,

0x30

, 0x0c,

0x00,

0x00,

0x10,

0x08,

0x00,

0x00,

0x18

, 0x18,

0x00,

0x07,

0хс4,

0x23,

0xe0,

0x0f,

0xf8

, 0xlf,

0xf0,

0x38,

0xlc,

0x38,

0xlc,

0x30,

0x00

, 0x00,

0x0c,

0x60,

0x00,

0x00,

0x06,

0x60,

0x00

, 0x00,

0x06,

0x60,

0x00,

0x00,

0x06,

0x60,

0x00

, 0x00,

0x06,

0x60,

0x00,

0x00,

0x06,

0x30,

0x00

, 0x00,

0x0c,

0x30,

0x00,

0x00,

0x0c,

0x18,

0x00

, 0x00,

0x18,

0х0е,

0x00,

0x00,

0x70,

0x03,

0x00

, 0x00,

0xc0,

0x00,

OxcO,

0x03,

0x00,

0x00,

0x70

, 0x0e,

0x00,

0x00,

0x18,

0x18,

0x00,

0x00,

0x0c

, 0x30,

0x00,

0x00,

0x07,

OxeO,

0x00,

0x00,

0x03

, 0xc0,

0x00,

0x00,

0x01,

0x80,

0x00,

0x00,

0x00

, 0x00,

0x00

GLubyte

gStripU =

// Другой узор -

полоса


0x66,

0x66,

0x66,

0x66,

0x33,

0x33

, 0x33,

0x33,

0x66,

0x66,

0x66,

0x66,

0x33,

0x33

, 0x33,

0x33,

0x66,

0x66,

0x66,

0x66,

0x33,

0x33

, 0x33,

0x33,

0x66,

0x66,

0x66,

0x66,

0x33,

0x33

, 0x33,

0x33,

0x66,

0x66,

0x66,

0x66,

0x33,

0x33

, 0x33,

0x33,

0x66,

0x66,

0x66,

0x66,

0x33,

0x33

, 0x33,

0x33,

0x66,

0x66,

0x66,

0x66,

0x33,

0x33

, 0x33,

0x33,

0x66,

0x66,

0x66,

0x66,

0x33,

0x33

, 0x33,

0x33,

0x66,

0x66,

0x66,

0x66,

0x33,

0x33

, 0x33,

0x33,

0x66,

0x66,

0x66,

0x66,

0x33,

0x33

, 0x33,

0x33,

0x66,

0x66,

0x66,

0x66,

0x33,

0x33

, 0x33,

0x33,

0x66,

0x66,

0x66,

0x66,

0x33,

0x33

, 0x33,

0x33,

0x66,

0x66,

0x66,

0x66,

0x33,

0x33

, 0x33,

0x33,

0x66,

0x66,

0x66,

0x66,

0x33,

0x33

, 0x33,

0x33,

0x66,

0x66,

0x66,

0x66,

0x33,

0x33

, 0x33,

0x33,

0x66,

0x66,

0x66,

0x66,

0x33,

0x33

, 0x33,

0x33,

Функцию OnDraw замените целиком. Так же поступайте и дальше. Следите лишь за изменениями в функциях main, OnSize и init, которые понадобятся при радикальной смене режима передачи (rendering). Позже мы перейдем к передаче трехмерной графики, а пока режим тот же — двухмерная графика:

void _stdcall OnDraw()

{

//====== Стираем окно

glClear (GL_COLOR_BUFFER_BIT);

//====== Цвет фона (синеватый)

glColor3f (0.3f, 0.3f, 1.);

//==



Содержание раздела