- •Введение
- •Лабораторная работа №1 Построение примитивов с помощью библиотеки OpenGl
- •Основные теоретические положения
- •1. Особенности работы с библиотекой OpenGl
- •2. Основные процедуры и функции OpenGl
- •Задания
- •2. Пирамида отсечения
- •3. Плоскость отсечения
- •Лабораторная работа №3 Текстурирование трехмерных изображений с использованием библиотеки OpenGl
- •Основные теоретические положения
- •1. Проективное текстурирование
- •2. Вывод текстуры в общем случае
- •3. Прозрачность в OpenGl
- •Задания
- •Источники света и материалы в библиотеке «opengl»
- •Основные теоретические положения
- •1. Источники света
- •2. Тени
- •Задания
- •Метод порталов
- •Задания
- •Приложение 1 Отчет по лабораторной работе должен содержать:
- •Требования к программе:
- •Требования к исходным текстам:
3. Плоскость отсечения
Пусть дан массив точек V[k], параметры плоскости отсечения N и d.
Если j-я и j+1-я точки расположены по разные стороны от плоскости, то вычисляется точка пересечения P отрезка (Vi,Vi+1) с плоскостью. В выходной массив заноситься точка Р. Если j-я точка лежит во внутренней полупространстве, то добавляется в выходной массив точка Vi.
Задания
Написать программу, реализующую построение части сцены, попадающей в пирамиду отсечения, связанной с подвижной камерой. Отображаться должны только лицевые грани. Сцена должна состоять как минимум из трех разных фигур, расположенных касаясь друг друга рядом.
Интерфейс должен предусматривать изменение положения и направления камеры просмотра.
Контрольные вопросы
Что такое не лицевая грань?
Что необходимо для вычисления вектора внешней нормали?
Опишите метод построения тела с помощью пирамиды отсечения.
Опишите метод построения тела с помощью плоскости отсечения.
Лабораторная работа №3 Текстурирование трехмерных изображений с использованием библиотеки OpenGl
Цель работы: изучить основные процедуры и функции при текстурировании изображений, приобрести практические навыки наложения текстуры на объемную фигуру.
Основные теоретические положения
1. Проективное текстурирование
Для повышения реалистичности изображений в компьютерной графике применяется текстурирование. Текстура - это одномерное или двумерное изображение поверхности. В библиотеке OpenGL имеется ряд функций для работы с текстурами. Поддержку текстурирования включают командой glEnable( GL_TEXTURE_2D). Так как библиотека рассчитана на работу под различными операционными системами, то она имеет собственный формат хранения изображений. Каждая точка храниться как 24 битное число. При этом первый байт - это красная составляющая, второй – зеленая составляющая, третий - синяя составляющая цвета. Текстуры могут иметь размер только кратный степени 2.
Библиотека OpenGL поддерживает пирамидальную фильтрацию. В этом случае требуется задать несколько текстур для каждого уровня или параметры масштабирования текстур для автоматического расчета уровней. Текстура привязывается к вершине путем задания перед вершиной координат текстуры. Также библиотека OpenGL поддерживает и простой вывод массива пикселов на экран.
Для преобразования изображения в системе Windows в формат, совместимый с библиотекой OpenGL, требуется выполнить следующие действия:
Загрузить изображение LoadImage
Подготовить структуру BITMAPINFO. Очистить ее нулем. В поле bmiHeader.biSize занести размер поля bmiHeader.
Получить параметры загруженного изображение (GetDIBits при задании количества линий 0).
Заполнить структуру BITMAPINFO:
bmiHeader.biPlanes=1; // 1 цветовая плоскость;
bmiHeader.biBitCount=24; // количество бит на цветов;
biTexture.bmiHeader.biCompression=BI_RGB; // без компрессии;
biTexture.bmiHeader.biHeight=dwHeight; // установим требуемую высоту;
bmiHeader.biWidth=dwWidth; // установим требуемую ширину;
выделить память под данные. Размер выделяемой памяти можно вычислить как ширина*высоту* количество_байт_на_цвет.
Получить данные изображения в требуемом формате (GetDIBits с передачей структуры BITMAPINFO)
Для каждого пиксела в полученных данных требуется поменять местами красную и синюю составляющую.
Для вывода массива пикселов на экран требуется выполнить следующую последовательность действий:
Установить координаты для вывода изображения (glRasterPos3f).
Установить параметры масштабирования (glPixelZoom).
Отобразить массив пикселов glDrawPixels.