Вариант функции drawPolyLineFileO, приведенный в листинге 2.9, имеет очень слабый уровень контроля ошибок. Если файл нельзя открыть - возможно, потому, что в функцию передано неверное имя, - подпрограмма просто возвращает управление в главную программу. Если файл содержит неверные данные, например вместо целых чисел стоят вещественные, - результаты будут непредсказуемы. Очевидно, что данную подпрограмму следует рассматривать только как точку отсчета для разработки более адекватной версии.

Листинг 2.9. Вычерчивание ломаных линий, записанных в файле

#include <fstream.h>
void drawPolyLineFile(char * fileName)
{
fstream inStream:

inStream.open(fileName. ios ::in); // open the file // открываем файл

ifdnStream.fail ())
return:

glClear(GL_COLOR_BUFFER_BIT): // clear the screen // очищаем экран

GLint numpolys. numLines. x, y:

inStream » numpolys: // read the number of polylines // читаем число ломаных

2.3. Создание рисунков из линий

for(int j - 0: j < numpolys: // read each polyline // читаем каждую ломаную

{
inStream » numLines:

glBegin(GL_LINE_STRIP): // draw the next polyline // чертим очередную ломаную

for (int i - 0: i < numLines: i++)
{

inStream » x » y: // read the next x. у pair // читаем очередную пару x. у

glVertex2i(x. у);

}
glEndO:
}
glFlushO: inStream.closeO:
}

Пример 2.3.3. Параметризация рисунков На рис. 2.13 изображен простой домик, состоящий из нескольких ломаных. Его можно нарисовать с использованием кода, частично приведенного в листинге 2.10. (Какой код понадобится для рисования двери и окна?)

Листинг 2.10. Рисование домика с «вмонтированными» размерами void hardwirededHouseO {

glBegin(GL_LINE_L00P):

glVertex2i(40. 40): // draw the shell of house // рисуем остов домика

glVertex2i(40. 90):
glVertex2i(70. 120):
glVertex2i(100. 90):
glVertex2i(100. 40):
glEndO:
gl Beg i n(GL_LIN E_STRIP); glVertex2i(50. 100):

продолжение &

Начальная стадия: рисование фигур

Листинг 2.10 (продолжение) // draw the chimney // рисуем трубу

glVertex2i(50. 120):

⇐ Предыдущая| |Следующая ⇒