Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КГ_методичка.doc
Скачиваний:
27
Добавлен:
08.03.2016
Размер:
125.44 Кб
Скачать

3. Плоскость отсечения

Пусть дан массив точек V[k], параметры плоскости отсечения N и d.

Если j-я и j+1-я точки расположены по разные стороны от плоскости, то вычисляется точка пересечения P отрезка (Vi,Vi+1) с плоскостью. В выходной массив заноситься точка Р. Если j-я точка лежит во внутренней полупространстве, то добавляется в выходной массив точка Vi.

Задания

Написать программу, реализующую построение части сцены, попадающей в пирамиду отсечения, связанной с подвижной камерой. Отображаться должны только лицевые грани. Сцена должна состоять как минимум из трех разных фигур, расположенных касаясь друг друга рядом.

Интерфейс должен предусматривать изменение положения и направления камеры просмотра.

Контрольные вопросы

  1. Что такое не лицевая грань?

  2. Что необходимо для вычисления вектора внешней нормали?

  3. Опишите метод построения тела с помощью пирамиды отсечения.

  4. Опишите метод построения тела с помощью плоскости отсечения.

Лабораторная работа №3 Текстурирование трехмерных изображений с использованием библиотеки OpenGl

Цель работы: изучить основные процедуры и функции при текстурировании изображений, приобрести практические навыки наложения текстуры на объемную фигуру.

Основные теоретические положения

1. Проективное текстурирование

Для повышения реалистичности изображений в компьютерной графике применяется текстурирование. Текстура - это одномерное или двумерное изображение поверхности. В библиотеке OpenGL имеется ряд функций для работы с текстурами. Поддержку текстурирования включают командой glEnable( GL_TEXTURE_2D). Так как библиотека рассчитана на работу под различными операционными системами, то она имеет собственный формат хранения изображений. Каждая точка храниться как 24 битное число. При этом первый байт - это красная составляющая, второй – зеленая составляющая, третий - синяя составляющая цвета. Текстуры могут иметь размер только кратный степени 2.

Библиотека OpenGL поддерживает пирамидальную фильтрацию. В этом случае требуется задать несколько текстур для каждого уровня или параметры масштабирования текстур для автоматического расчета уровней. Текстура привязывается к вершине путем задания перед вершиной координат текстуры. Также библиотека OpenGL поддерживает и простой вывод массива пикселов на экран.

Для преобразования изображения в системе Windows в формат, совместимый с библиотекой OpenGL, требуется выполнить следующие действия:

  1. Загрузить изображение LoadImage

  2. Подготовить структуру BITMAPINFO. Очистить ее нулем. В поле bmiHeader.biSize занести размер поля bmiHeader.

  3. Получить параметры загруженного изображение (GetDIBits при задании количества линий 0).

  4. Заполнить структуру BITMAPINFO:

bmiHeader.biPlanes=1; // 1 цветовая плоскость;

bmiHeader.biBitCount=24; // количество бит на цветов;

biTexture.bmiHeader.biCompression=BI_RGB; // без компрессии;

biTexture.bmiHeader.biHeight=dwHeight; // установим требуемую высоту;

bmiHeader.biWidth=dwWidth; // установим требуемую ширину;

выделить память под данные. Размер выделяемой памяти можно вычислить как ширина*высоту* количество_байт_на_цвет.

  1. Получить данные изображения в требуемом формате (GetDIBits с передачей структуры BITMAPINFO)

  2. Для каждого пиксела в полученных данных требуется поменять местами красную и синюю составляющую.

Для вывода массива пикселов на экран требуется выполнить следующую последовательность действий:

  1. Установить координаты для вывода изображения (glRasterPos3f).

  2. Установить параметры масштабирования (glPixelZoom).

  3. Отобразить массив пикселов glDrawPixels.