Task 3 (1126109), страница 3
Текст из файла (страница 3)
Камера по сути - это точка впространстве с заданной ориентацией. Ориентацию можно задавать двумя углами всферической системе координат. Кроме классических путей решения задачи, можнопопробовать подход с кватернионами.7.4 ТекстураПример использования текстуры дан в шаблоне.Для использования полноценных текстур их необходимо предварительно загрузить из файла.Размер текстуры должен быть кратен степеням двойки, также должно использоватьсявыравнивание рядов по 4 байта в памяти. Чтобы обойти это ограничение используйтеglPixelStorei.В схематичном режиме при приближении к планетам может быть реализована подгрузка текстурдля заданных полигональных сеток (или, в более простом варианте, для всей планеты целиком).Текстуры всех планет можно скачать здесь.7.5 ОсвещениеФормулы для расчета классической модели Фонга можно посмотреть здесь.12В фрагментном шейдере необходимо рассчитать направление векторов от точки планеты илизвезды на источник и на камеру.
Положение источника задается встроенной переменнойgl_LightSource (в случае, если в коде на cpu источник присутствовал в виде glLight(...)). Впротивном случае вы можете передать в шейдер нужное число источников с параметрами,используя uniform.Для вычисления отраженного вектора в коде шейдера рекомендуется использовать командуreflect.Планетам соответствуют материалы и текстуры, с которыми рекомендуется связать uniformпеременные.
Uniform-ы можно заполнять при отрисовке каждой конкретной модели.Схематичный режим работыДля реализации схематичного режима работы программы возможно:1) масштабирование координат планет по некоторой функции2) масштабирование размеров планет по некоторой функцииВ качестве масштабирующей функции можно использовать логарифм.Важно: в схематичном режиме нужно менять только масштаб при рендеринге, никаких реальныхкоординат, использующихся в моделировании движения масштабировать не нужно, иначеможно запутаться.7.6 Расчет нормалейДля базы это можно сделать на CPU, при расчете на GPU в геометрическом шейдере выполучаете дополнительные баллы.При простейшем подходе к расчету нормалей можно посчитать нормаль для каждоготреугольника, а потом присвоить ее всем вершинам треугольника.
Нормаль вычисляется каквекторное произведение векторов-образующих сторон треугольника.Для подсчета гладких нормалей некоторых объектов можно использовать заранее известныеформулы (например, для сферы нормаль может быть вычислена аналитически в любой ее точке).Нормаль для произвольного меша можно вычислить в геометрическом шейдере следующимобразом:1) сначала берем треугольники, прилежащие к данному (3 штуки),2) для каждого треугольника вычисляем нормаль (вышеуказанным образом,3) для каждой их трех вершин 3 полученные нормали усредняются (возможно взвешенноеусреднение: например, учет раствора угла каждого треугольника или длины противолежащейстороны).13При таком подходе, вам нужно будет перестроить вашу модель, и передавать на отрисовку неGL_TRIANGLES, а GL_TRIANGLES_ADJACENCY (примитив из шести вершин).Можно также реализовать сглаживание нормалей через интерполяцию гладкими кривыми.8 Подсказки к решению: бонусы8.1 Подгрузка текста в окно openglКак подгружать текст в окно opengl, написано здесь.
Придется использовать команды видаglTranslatef(100,100,0);glutStrokeString(GLUT_STROKE_ROMAN,”Hello!”);Они установят курсор в заданную позицию окна и выведут на нам текст Hello в заданном стиле.Для красоты текст удобно расположить на полупрозрачной подложке: прямоугольнике спрямыми или сглаженными углами светлого цвета (при темном тексте) или темного с яркойрамкой (при светлом тексте).АтмосфераВ простейшем случае атмосфера представляет собой одну либо несколько прозрачных сфер,окружающих планету.
Если сфер несколько, прозрачность должна увеличиваться с увеличениемрадиуса. Атмосфера должна освещаться от Солнца по диффузной модели освещения. Атмосферабудет похожа на атмосферу, если во фрагментном шейдере будет установлена зависимостьпрозрачности от положения камеры (чем больше расстояние меша от камеры, тем большепрозрачность мешей атмосферы) - при таком подходе достаточно будет одной сферы.Хорошо, если эффект атмосферы будет реализован в отдельном шейдере.8.2 Плавная камераКак в схематичном, так и в реальном режимах работы программы движение камеры должнобыть согласовано с ее положением. Камера должна знать о положениях небесных тел иувеличивать шаг перемещения в зависимости от удаленности от планет.
В случае, если камеранаходится близко к одной из планет (ближе заданного порога), она должна плавно (линейно,либо логарифмически) уменьшать шаг.8.3 Прозрачные кольца Сатурна14Кольца Сатурна рекомендуется реализовать в схематичном режиме работы. В простейшемварианте кольца могут представлять собой набор вращающихся окружностей различных цветов.При более сложном подходе - полупрозрачные вращающиеся концентрические круги свырезанным центрами.
Хорошо, если на кольца будет наложена текстура.При приближении к планете возможна визуализация колец в виде набора вращающихся частицразличных цветов. Следует учесть, что кольца разного диаметра вращаются с разной скоростью,чем меньше диаметр кольца (т.е. чем ближе оно к планете), тем больше скорость вращения.Также возможна реализация эффекта “исчезающих колец Сатурна”.
Кольца могут плавноисчезать и появляться снова с некоторой заданной периодичностью. Данный эффект можнореализовать, установив зависимость прозрачности мешей колец (либо частиц, при хорошемприближении) от времени.Рекомендуется реализовать кольца Сатурна в отдельном шейдере.При отрисовке колец важно правильно воспользоваться буфером глубины и рисовать объекты вправильном порядке: сначала выводятся все непрозрачные объекты, затем прозрачные впорядке удаленности от камеры (сначала - наиболее удаленные).8.4 Тени от спутников на планетахВозможно несколько различных вариантов реализации теней от спутников на поверхностипланет.
Можно реализовать как простейшие резкие тени от Солнца (или от Луны, еслирассматриваем спутники Земли) либо более реалистичные размытые тени от двух и болееисточников. Поощряются все известные методы реализации теней (shadow volumes и др.).158.5 СозвездияВозможна реализация звездного неба в качестве сферического окружения. Приветствуетсяреализация нескольких отдельных созвездий, как минимум 3-х (для этого рекомендуетсязавести несколько дополнительных объектов созвездий и рисовать их при помощиGL_LINE_STRIP поверх сферического окружения).8.6 Отражения сферического окруженияОтражения сферического окружения на поверхности объекта можно получить при помощиотражения вектора камеры, попавшего на модель объекта, на сферическое окружение идальнейшей выборки текстуры в получившемся направлении.
При отражении вектора, идущего откамеры к объекту, рекомендуется использовать гладкую нормаль.16.















