Перейти к основному содержанию
EDU-MMCS
Вы используете гостевой доступ (Вход)

CS332. Компьютерная графика

  1. В начало
  2. Курсы
  3. Осенний семестр
  4. Фундаментальная информатика и ИТ
  5. Компьютерная графика
  6. Модуль 3. OpenGL
  7. Лабораторная работа № 10. Зелёный треугольник

Лабораторная работа № 10. Зелёный треугольник

Требуемые условия завершения
Открыто с: пятница, 1 ноября 2024, 00:00
Срок сдачи: пятница, 15 ноября 2024, 23:59

Зелёный треугольник

Прежде чем начать

Если вы используете WebGl, то все необходимые примитивы для работы с канвасами и пользовательским вводом достаются вам бесплатно из html и js.

В противном случае (если вы пишете на C++, Rust, и т.п.), вам необходимо установить библиотеку для работы с окнами и пользовательским вводом. Мы рекомендуем использовать SFML. Код инициализации окна можно взять, например, из презентации.

Порядок действий

  1. Инициализировать шейдеры (вершинный и фрагментный)

    • Объекты шейдеров создаются функцией glCreateShader.
    • Инициализируются исходным кодом функцией glShaderSource
    • Компилируется функцией glCompileShader
    • Обработать ошибки (см. пункт про обработку ошибок далее)
  2. Инициализировать шейдерную программу

    • Создаём шейдерную программу: glCreateProgram
    • Присоединяем каждый шейдер функцией glAttachShader
    • Линкуем программу glLinkProgram
    • Обработать ошибки
  3. Получить id аттрибутов из шейдерной программы

    • Используем функцию glGetAttribLocation
    • Если индекс, возвращённый glGetAttribLocation оказался -1, то вы сделали что-то не так
  4. Инициализировать VBO
    VBO — это массив данных в видеопамяти.

    • Создаём VBO: glGenBuffers
    • Биндим VBO: glBindBuffer (подробнее об этом далее)
    • Заполняем его данными функцией glBufferData
  5. Отрисовать сцену

    • Установить шейдерную программу текущей: glUseProgram
    • Вызываем демонов функцией glEnableVertexAttribArray
    • Биндим VBO: glBindBuffer
    • Привязываем к нему аттрибут: glVertexAttribPointer
    • Можно рисовать: glDrawArrays
    • Обработать ошибки
  6. Очистить ресурсы
    Когда штуки больше не нужны, их надо удалять

    • Удаление шейдерной программы: glDeleteProgram
    • Удаление VBO: glDeleteBuffers

Обработка ошибок

После каждого действия надо спрашивать OpenGL успешно ли он с этим действием справился.

Обработка ошибок компиляции шейдеров

Для получения результатов компиляции каждого шейдера (функция glCompileShader) можно использовать следующую функцию

void ShaderLog(unsigned int shader)
{
    int infologLen = 0;
    glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &infologLen);
    if (infologLen > 1)
    {
        int charsWritten = 0;
        std::vector<char> infoLog(infologLen);
        glGetShaderInfoLog(shader, infologLen, &charsWritten, infoLog.data());
        std::cout << "InfoLog: " << infoLog.data() << std::endl;
    }
}

Обработка других ошибок

Результат большинства функций в OpenGL, которые могут закончиться неудачей, можно получить функцией glGetError. Она возвращает код ошибки, трактовку которого и пример использования функции можно получить в документации.

Обработка ошибок в WebGL

В WebGL ошибки следует обрабатывать, как стандартный Exception (но иногда он их просто пишет в консоль)

Биндинг

В процессе работы с различными примитивами OpenGl мы нередко сталкиваемся с функциями вида glBind.... Это работает следующим образом. В памяти OpenGL существует переменная, отвечающая за то, с каким объектом мы работаем в данный момент. Этот объект как раз выбирается функциями glBind....

Например при заполнении VBO мы сначала сообщаем OpenGL, с каким буфером мы сейчас будем работать:

glBindBuffer(GL_ARRAY_BUFFER, VBO);

Затем вызываем функцию, заполняющую его данными:

glBufferData(GL_ARRAY_BUFFER, sizeof(triangle), triangle, GL_STATIC_DRAW);

Хорошим тоном считается после использования разбиндить буфер, вызвав

glBindBuffer(GL_ARRAY_BUFFER, NULL);

Результат

В ходе этой лабораторной необходимо реализовать отрисовку зелёного треугольника на чёрном фоне с помощью OpenGL/WebGL и шейдеров.

◄ Установка и работа с Opengl + SFML
Лекция 16. Шейдеры. Ведение ►
Пропустить Навигация
Навигация
  • В начало

    • Страницы сайта

      • Мои курсы

      • Теги

    • Мои курсы

    • Курсы

      • Осенний семестр

        • Прикладная математика и информатика

        • Фундаментальная информатика и ИТ

          • Compiler Development

          • CMVSM

          • АЗПК

          • Frontend

          • ТеорЯП

          • Ruby Eng

          • EngCA&OS

          • CS201e

          • Компиляторы - лекции

          • CS202

          • CS211 C++ ENG

          • Компьютерная графика

            • Введение в компьютерную графику

            • Модуль 1. 2D графика

            • Модуль 2. Моделирование и визуализация трехмерных ...

            • Модуль 3. OpenGL

              • ФайлЛекция 15. Введение в OpenGL

              • СтраницаУстановка и работа с Opengl + SFML

              • ЗаданиеЛабораторная работа № 10. Зелёный треугольник

              • ФайлЛекция 16. Шейдеры. Ведение

              • ЗаданиеЛаб.11. Построение различных 2D фигур. Плоское и г...

              • ФайлЛекция 17. Введение в GLSL.

              • ФайлЛекция 18. Наложение текстур

              • ЗаданиеЛаб. 12. Атрибуты, юниформы и трёхмерные объекты в...

              • ФайлЛекция 18. VBO, VAO, EBO

              • ФайлЛекция 19. Инстанцированный рендеринг

              • ЗаданиеЛаб. 13. Загрузка файлов, множественные объекты

              • ФайлЛекция 20. Модели освещения и расчёт освещения в ш...

              • ЗаданиеЛаб. 14. Освещение

              • ФайлЛекция 21. Рельефное текстурирование

              • ФайлЛекция 22. Тесселяция

              • ЗаданиеИндивидуальное задание №3 — Почтовый дирижабль

              • ФайлЛекция Олега Арутюнова. Процедурное текстурирование

              • ФайлЛекция 23. Геометрические шейдеры

              • ФайлЛекция 24. Наложение теней

              • ЗаданиеБонусные баллы за индивидуальное №3

        • Математика, механика

        • Педагогическое образование

        • Магистратура

          • Разработка мобильных приложений и компьютерных игр

        • Аспирантура

        • Вечернее отделение

        • Другое

      • Весенний семестр

        • Прикладная математика и информатика

        • Фундаментальная информатика и ИТ

        • Математика, механика

        • Педагогическое образование

        • Магистратура

          • Разработка мобильных приложений и компьютерных игр

        • Аспирантура

        • Вечернее отделение

        • Другое

      • Воскресная компьютерная школа

        • Пользователь компьютера плюс

        • Пользователь прикладных программ

        • Программирование I ступень

        • Программирование II ступень

        • Программирование III ступень

        • Архив

      • Воскресная математическая школа

        • Открытое тестирование РНОМЦ и мехмата ЮФУ - 2025

        • Олимпиадная математическая школа

        • Повышение квалификации

        • Доступная математика

        • Лаборатория математического онлайн-образования мех...

        • Осенняя универсиада

        • Научно-практическая конференция

        • ВМШ

          • ВМШ - 24

        • Летняя олимпиадная математическая школа РНОМЦ и ме...

      • Государственная итоговая аттестация

      • Дополнительное образование

      • Олимпиады

      • Видеолекции

      • Разное

      • Архив курсов

      • Заочная школа мехмата ЮФУ

Служба поддержки сайта
Вы используете гостевой доступ (Вход)
Компьютерная графика
Сводка хранения данных
Скачать мобильное приложение Яндекс.Метрика