detal : Array [0..9] of TVector =
((-0.23678, 0.35118, 0.0),
(-0.23678, 0.7764, 0.0),
(-0.37966, 0.7764, 0.0),
(-0.55, 0.60606, 0.0),
(-0.55, -0.4, 0.0),
(0.45, -0.4, 0.0),
(0.45, 0.60606, 0.0),
(0.27966, 0.7764, 0.0),
(0.13678, 0.7764, 0.0),
(0.13678, 0.35118, 0.0) );
Используются tess-объекты и просто перечисляются вершины контура:
gluTessBeginPolygon (tobj, nil);
gluTessBeginContour(tobj);
For i := 0 to 9 do
gluTessVertex(tobj, [Sdetalfi], (Metal [i]);
gluTessEndContour(tobj);
gluTessEndPolygon(tobj);
Вышесказанное пока не относится к теме раздела, а только позволяет нам вспомнить некоторые пройденные темы.
Теперь по поводу собственно узора, в данном случае штриховки. Для нее я взял массив из 16 одинаковых строчек:
const
р75 : Array [0..127] of GLUbyte =
( $аа, $аа, $аа, $аа, $ff, $ff, $ff, $ff,
...
Значение каждого байта будет задавать узор восьми пикселов строки.
Для подключения штриховки необходимо включить соответствующий режим и вызвать команду, устанавливающую шаблон:
glEnable(GL_POLYGON_STIPPLE);
glPolygonStipple(@p75);
Теперь деталь покрывается равномерным узором. В программе случайно меняется текущий цвет, вся штриховка монохромная. Она может быть и разноцветной; если для каждой вершины многоугольника цвет задавать индивидуально, то штриховка покроется цветными переливами.
Рисунок 4.50 иллюстрирует работу следующего, совсем простого примера (подкаталог Ех77).