Khaymon / computer-graphics-2022

👾 Repository for MIPT course of computer graphics.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Компьютерная графика ФПМИ МФТИ

Ссылки

Домашняя работа 1

  1. Запустить код уроков, проверить, что все работает, научиться создавать исполняемые файлы
  2. Используя два разных шейдера, нарисовать 2 пересекающихся треугольника разных цветов с альфа-каналом (полупрозрачных), вершины которых не находятся на краях экрана
  3. Добавить камеру в сцену, поиграться с функцией LookAt. Важно! После этого создать простой аналог анимационного фильма, где камера кружится вокруг тех двух треугольников, захардкодить её движение (не использовать ввод с мыши и клавиатуры) (на ваше усмотрение, по какой траектории движется камера, какая задержка между кадрами, сколько кадров и т.п.)
  4. Вместо куба из 4 урока, отрисовать любую другую объемную закрытую фигуру. Постараться настроить цвета вершин так, чтобы это было эстетично (но так как у всех понятия красоты отличаются, это не оценивается) и реализовать движение камеры вокруг.

Оценивание домашней работы 1

На сдаче задания напротив фамилии каждого в табличке будет 6 галочек:

  • (1,2) Сдано задание (это значит, что я удостоверился, что у студента выполнены все пункты, описанные в части «задание») Необходимые части: исполняемый файл (.exe со всеми необходимыми для работы библиотеками внутри или в директории) и код (.сpp + файлы шейдеров). Обязательно иметь возможность показать код, описать все части приложения. Задание сдано если код работает, условия соблюдены, то же самое не было показано другим человеком ранее.
  • (3) Наличие исполняемого файла для обоих заданий.
  • (4,5) Сданы задачи, которые скину в выходные. Т.е. есть записанное решение задачи, объяснен ход решения, дан верный ответ в читаемом виде + дан ответ на вопрос по теории с лекций.
  • (6) Доп. Балл за оригинальность / дополнительную фичу...
    Вес каждого пункта рассчитаем позже. Вес всего задания 2 балла не считая допов. Напоминаю, что для допуска на экзамен, нужно набрать не менее 1 балла.

TODO

  • Треугольники
  • Движение камеры
  • Что-то вместо куба
  • Задачи по лекциям

Домашняя работа 2

Создаем шутер на OpenGL

  • В нашей сцене учимся создавать объекты (те самые пирамиды- бублики-шары из 1го задания) с необходимыми позицией и ориентацией. (Пример: Instantiate ( Vector3 position, Vector3 rotation)
  • Создаем эти объекты в сцене в рандомных точках окрестности камеры (по типу не ближе 2х попугаев, но не дальше 50ти попугаев) с опреденными временными интервалами (лучше по времени (раз в несколько секунд), но можно и по количеству прошедших кадров ( раз в n кадров) ) и рандомной ориентацией в пространстве.
    Поздравляю, вы создали себе врагов. Теперь создаем снаряды:
  • Создаем "fireball" (не принципиально, будет ли это заранее сгенерированный 3D объект, как описывается в 7ом уроке туториала, либо сгенерированные по сфере точки, превращенные в полигоны)
  • "Натягиваем" на шар текстуру (любую вам приятную)
  • Добавляем шару возможность двигаться в направлении камеры. ( как пример: position += camera.forward × moveSpeed × deltaTime ) Порадуйтесь, что создали странноуправляемый наводящийся заряд.
  • Исправьте, чтобы каждый шар двигался в своем постоянном направлении
  • Каждому объекту добавляем "коллайдер". Определенное расстояние в попугаях (радиус сферы),которое мы используем для просчета соприкосновения объектов. Т.е. для всех наших снарядов попарно проверяем, что расстояния между центрами объектов меньше суммы радиусов коллайдеров (Пример: if ( Math.abs ( object.position - fireball.position ) < object.colliderRadius + fireball.colliderRadius ) object.delete(); )
  • При взаимодействии объектов, удаляем оба объекта

На допополнительный балл

  • Убираем весь свет в сцене, делаем источником света fireball-ы
  • Показываем на экране кол-во сбитых объектов
  • Супердопбалл: добавляем возможность сохранить и загрузить состояние нашей сцены (при нажатии определенной кнопки, сохраняем все необходимые данные объектов в текстовый файл, при нажатии другой, из него загружаем эти данные.

Домашняя работа 3

ДЗ 3 для тех, кому интереснее OpenGL Немного оптимизации в наш проект:

  • Поддержите изменение детализации ваших сфер по кнопкам с клавиатуры. При нажатии на + количество полигонов должно увеличиваться, при нажатии на - уменьшаться. (у кого сфера- скаченная 3D модель, нужно будет переделать)
  • Реализуйте взрыв вашей сферы (фаербола). Каждый полигон поверхности должен начать двигаться как единое целое в направлении своей исходной нормали (дополнительно, если будет интересно, добавить вращение каждого полигона).
  • Поддержите изменение скорости течения времени, чтобы можно было наблюдать разлет (и всю сцену) в замедлении.
  • Реализуйте skybox (текстуру неба вокруг сцены). Можно, например, натянуть на сферу изнутри или на куб
  • Сделайте "пол", много раз добавив какую-нибудь текстуру типа травы-дерева-камня и т.д.
    Выполнить любые 4 пункта

About

👾 Repository for MIPT course of computer graphics.


Languages

Language:C++ 100.0%