glVertex2i(60. 120):
glVertex2i(60. ПО): glEndO:
// draw the door // рисуем дверь
// draw the window // рисуем окно }
Данный подход не является достаточно гибким. Координаты каждой концевой точки «вмонтированы» внутрь кода, вследствие чего функция hardwirededHouseO может рисовать только единственный домик одного размера, размещенный единственным образом. Большей гибкости можно достигнуть, если параметризовать этот рисунок и передавать значения этих параметров в подпрограмму. Таким способом мы можем рисовать семейства объектов, отличающихся различными значениями параметров. Листинг 2.11 демонстрирует такой подход. Параметры задают расположение верха крыши, а также ширину и высоту домика. Такие детали, как рисование трубы, двери и окна, оставлены для вас в качестве упражнения.
Листинг 2.11. Рисование параметризованного домика
void parameterizedHouse(GLintPoint peak. Glint width, GLint height)
// the top of house is at the peak;
// верхняя точка домика;
// the size of house
// is given by the height and width
// размер домика задается его высотой и шириной
{
glBegin(GL_LINE_L00P):
glVertex2i(peak.x. peak.y): // draw shell of house // рисуем каркас домика
glVertex21(peak.x + width / 2. peak.y - 3 * height /8):
glVertex2i(peak.x + width / 2. peak.y - height):
glVertex2i(peak.x - width / 2. peak.y - height);
glVertex2i(peak.x - width / 2. peak.y - 3 * height /8): glEndO:
drain/ the chimney in ihe same fashion
II рисуем трубу таким же способом
draw the door
II рисуем дверь
draw the window
II рисуем окно
}
Данная подпрограмма может быть использована для того, чтобы нарисовать целую «деревню», как это показано на рис. 2.14, посредством последовательных вызовов функции parameterizedHouseO с различными значениями параметров. (Каким образом один из домиков оказался «перевернутым»? Все ли домики с этого рисунка можно нарисовать с помощью данной подпрограммы?)
2.3. Создание рисунков из линий
Рис. 2.14. «Деревня» из домиков, нарисованных с помощью подпрограммы parameterizedHouse() Пример 2.3.4. Создание рисовальщика ломаных