Курсовая работа: Модель трехмерной сцены и библиотека OpenGL
}
- Крышки для пульта
Элемент состоит из квадрата, фрагмент кода которого содержался еще в описании ножки стойки вентилятора. |
- Кнопки на пульте
Элемент состоит из цилиндра и круга, примитивов описанных ранее. |
Описание освещения фигуры
Освещение тела происходит в OpenGL благодаря включению функции SetupLighting() с необходимыми параметрами и условиями, а также за счет правильной расстановки нормалей к примитивам, из которого состоит тело. Чтобы задаваемые нормали нормировались автоматически необходимо включить функцию – glEnable(GL_NORMALIZE);
Подробней остановимся на нахождении нормалей к отдельным элементам тела.
Всего нормали были найдены и прописаны в код программы для 6 примитивов, элементов тела.
1. Лопасть
Для определения нормалей лопасти, поскольку она представляет собой некую поверхность, была использована аналитическая формула для нахождения уравнения поверхности по трём точкам и формула для нахождения нормали к поверхности, что находится через частные производные уравнения поверхности.
- уравнение поверхности, D не считаем, поскольку оно не влияет на выбор нормали.
Тогда координаты для нормали функции glNormal3f(a1,a2,a3) ,будет высчитываться по следующим формулам:
Исходя из записи уравнения поверхности и формулам, выписанные для коэффициентов в этой формуле получим:
Проведя расчет по данным формулам, получим что:
Для одинаково верного отображения освещения лопасти вентилятора как с одной, так и с другой стороны пришлось прибегнуть к подключению двустороннего освещения с помощью функции glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, k), где к =1 для включения и к =0 для её вылючения.
2. Цилиндр
Чтобы определить нормаль для цилиндра нужно координату, что изменяется линейно оставить нулевой, а две другие координаты будут совпадать с соответствующими координатами цилиндра ввиду того, что в основании цилиндра лежит окружность.
В итоге получим координаты нормали:
(0,sin((2*M_PI*qRoll)/M),cos((2*M_PI*qRoll)/M));
3. Круг
Нормаль для круга определяется как перпендикуляр к этой поверхности.
4. Квадрат
Нормаль для квадрата определяется аналогичным образом как и для круга.
5. Параллелепипед