Задания по развитию учебного проекта
Издание 5-е, исправленное и дополненное
Сдано в набор 15.09.2009 г. Подписано в печать 24.12.2009 г. Формат 30х42/4. Бумага офсетная – 65 г/м2. Гарнитура «Times». Печать ризографическая. Физ. печ. л. 243. Усл.-печ. л. 60,75. Уч.-изд. л. 54,56. Тираж – 300 экз. Заказ № 137.
Издательство ООО «Пилигрим» 386120, Республика Ингушетия, с. Кантышево, ул. Джабагиева, 97.
Отпечатано в типографии ООО «Пилигрим» 386102, Республика Ингушетия, г. Назрань, ул. Чеченская, 5. E-mail: piligrim-K@list.ru Задания по развитию учебного проекта Задания должны выполняться последовательно, поскольку результаты предыдущего потребуются при выполнении последующего. В учебном проекте поверхность сферы и нормали к ней вычисляются в методах CubeBox::draw_wired, CubeBox::draw_solid, CubeBox::draw_textured. 1. Выделить код по вычислению координат поверхности и нормалей к ней в отдельный метод CubeBox::compute_surface. Поверхность и нормали к ней должны сохраняться в динамически распределяемых массивах, на которые ссылаются указатели — члены класса CubeBox::coords и CubeBox::normals, должны быть добавлены члены класса, задающие размеры этого массива. Методы CubeBox::draw_wired, CubeBox::draw_solid, CubeBox::draw_textured должны производить выборку данных из массивов CubeBox::coords и CubeBox::normals в массивы, необходимые для работы функции glDrawArrays. 2. Нормали в учебном проекте вычисляются по точным формулам, полученным для сферы. Заменить эти формулы на приближенные формулы расчета нормалей через координаты поверхности из массива CubeBox::coords. Нормали должны вычисляться в узлах координатной сетки векторным произведением векторов, проведенных между угловыми узлами 9-точечного шаблона, как показано на рисунке. На границах массива использовать 6-точечный и 4-точечный шаблон.
3. Ввести локальные координаты объекта, для чего ввести дополнительные члены в класс и осуществлять вычисление поверхности не в локальных, а в мировых координатах. 4. Создать абстрактный базовый класс поверхности SURFACE c абстрактным виртуальным методом compute_surface, переименовав его в SPHERE, специализировав метод compute_surface. 5. Разработать еще один класс гиперболоида HYPERBOLOID, специализировав метод compute_surface. 6. Доработать программу для вывода нескольких поверхностей. Для этого, разработать клаcc SCENE, который будет рисовать объекты-поверхности, причем метод CubeBox::draw станет методом этого класса SCENE::draw. Ввести вектор указателей на объекты-поверхности vector<SURFACE*> SCENE::surfaces, который должен быть заполнен указателями на динамически размещенные объекты-поверхности. Путем прохода по вектору и вызовом виртуальной функции make_figure, нарисовать все поверхности. 7. Ввести управление точкой обзора клавишами клавиатуры и мышью (необходимый материал будет дан позднее).
|