OpenGL в Delphi

       

Штриховкой можно пользоваться для создания призрачных объектов




Поскольку в OpenGL из многоугольников строятся все объемные фигуры вообще, режим штриховки распространяется и на сферу
Шаблон штриховки в программе заполняется случайными числами:

procedure create_stipple_pattern(var pat: TPattern; opacity: GLfloat);
var
x, у: GLint;
Begin
For у: = 0 to 31 do Begin pat[y]: = 0;
For x: = 0 to 31 do
If (random > 0. 6) // чем меньше это число, тем плотнее штриховка
then pat[y]: = pat[y] xor (1 shl x);
end;
end;

При воспроизведении кадра режим штриховки включается только для сферы

glEnable(GL_POLYGON_STIPPLE);
draw_sphere(Angle);
glDisable(GL_POLYGON_STIPPLE);

Посмотрите, какой эффект возникает, если менять штриховку по ходу работы приложения, для чего вставьте следующие две строки перед очередной перерисовкой кадра:

create_stipple_pattern(spherePattern, 0.5) ;
glPolygonStipple(spherePattern);

Замечание
Старайтесь выносить подобные вычислительные операции за пределы собственно воспроизведения кадра

Если попытаться и второй объект сцены, конус, сделать таким же эфемерным, то сфера при прохождении за ним становится невидимой - конус закрывает ее, так как шаблоны штриховки у них одинаковы.
Посмотрите проект из подкаталога Ех80: здесь такого не происходит, поскольку для каждого объекта сцены шаблон задается индивидуально.

glEnable(GL_POLYGON_STIPPLE); // включить режим штриховки
glPolygonStipple(@conePattern); // задаем шаблон для конуса
draw_cone; // рисуем штрихованный конус
glPolygonStipple(spherePattern); // задаем шаблон для сферы
draw_sphere(Angle); // рисуем штрихованную сферу
glDisable(GL_POLYGON_STIPPLE); // выключим режим



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