Существует много способов определить класс Canvas. Вариант, представленный здесь, следует рассматривать лишь как отправную точку для вашей собственной версии. В данном разделе мы реализуем этот класс с помощью OpenGL, используя все операции, которые OpenGL делает автоматически (такие, как отсечение). В то же время в тематическом задании 3.4 мы описываем совершенно иную реализацию

3.4. Разработка класса Canvas

Не следует думать, что чувства - это все. Искусство без формы - ничто.

Гюстав Флобер

3.4. Разработка класса Canvas

(на основе Turbo С++ в среде DOS), которую нам придется снабдить всеми инструментальными средствами. В частности, там используется реализация отсекателя Кохена-Сазерленда.

3.4.1. Несколько полезных вспомогательных классов Полезно иметь несколько общих типов данных, доступных для использования в классе Canvas и других классах. Мы определяем их здесь как классы1 и демонстрируем простые конструкторы и другие функции для обработки объектов каждого типа. В некоторых из этих классов также имеется функция draw, которая облегчает рисование экземпляров данного класса. По мере необходимости будут добавляться другие функции (методы). Некоторые методы реализуются непосредственно в определениях класса; реализация других предлагается в качестве упражнения, и тогда дано только определение метода.

class Point2. Точка с вещественными координатами Первый вспомогательный класс включает в себя единственную точку, описанную координатами с плавающей запятой. Он представлен двумя конструкторами: функцией set() для присвоения координатам нужных значений и двумя функциями для определения текущих значений координат. Вот код для этого класса:

class Point2 {
public:

Point2() {x - у - O.Of:} // constructorl // конструктор 1

Point2(float xx. float yy) {x = xx: у - yy;} // constructor // конструктор 2

void setCfloat xx. float yy) {x - xx: у - yy:}

float getXO {return x:}
float getYO {return y:}

void draw(void) { glBegin(GL_POINTS): // draw this point // рисуем эту точку

glvertex2f«GLfloat)x. (GLfloat)y): glEndO:}

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