Опубликован: 13.07.2010 | Доступ: свободный | Студентов: 891 / 20 | Оценка: 4.40 / 4.20 | Длительность: 77:34:00
Самостоятельная работа 22:

Свет и материалы в OpenGL

Аннотация: Глаз человека и оптические системы. Куб цвета (ColorCube). Свет и материя. Модель освещения. Модель самолета без использования освещения (Jet). Рисование освещенной сферы (LightSphere). Материал и его свойства. Задание свойств материала. Первый способ задания нескольких материалов (MultiMaterial). Группы атрибутов. Второй способ задания нескольких материалов (ColorSphere). Источники света и их свойства. Модель самолета с нулевым освещением (JetNight). Модель самолета с равномерным освещением (JetLight). Модель самолета с зеркальным отражением (JetShiny). Кристалл и прожектор (CrystalAndSpot). Модель самолета и его тени (JetShadow). Освещенный мир сфер (SphereWorld).

Файлы к лабораторной работе Вы можете скачать здесь.

Некоторые упражнения меняют настройки OpenGL так, что после них новое упражнение может не иметь ожидаемых свойств. В этом случае перезапуск приложения восстанавливает графическую систему в начальное состояние и очередное упражнение дает ожидаемый результат.

Создание заготовки приложения

  • Выполните команду меню оболочки File/New/Project.
  • В появившемся окне мастера создания заготовки проекта задайте имя проекта LightAndMaterial, выберите каталог размещения проекта, как показано на снимке


  • После нажатия кнопки OK в следующем окне оставьте установки мастера по умолчанию и щелкните на кнопке Finish

  • Переименуйте функцию _tmain() файла LightAndMaterial.cpp в main(), измените в заголовке определения функции main() тип возвращаемого значения, чтобы код выглядел так
// LightAndMaterial.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

void main(int argc, char* argv[])
{
}
Листинг 23.1. Начальная заготовка файла LightAndMaterial.cpp
  • Через панель Solution Explorer оболочки откройте файл stdafx.h, который создал мастер проекта, и добавьте в самое его начало после инструкции #pragma once код подключения стандартных заголовочных файлов для операционной системы и OpenGL
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
  
#pragma once
  
#include <windows.h>
#include <gl/gl.h>
#include <gl/glu.h>
#include <gl/glut.h>  
    
#include <iostream>
#include <tchar.h>
    
// TODO: reference additional headers your program requires here
Листинг 23.2. Добавление стандартных заголовков в файл stdafx.h
Здесь предполагается, что ваша платформа настроена на разработку приложений OpenGL в соответствии с рекомендациями, которые должно было выполнить в работе №19.

В этой лабораторной работе мы опять выполним несколько упражнений, которые упакуем в одно приложение. Соответственно, для вызова каждого отдельного упражнения предусмотрим свой пункт контекстного меню. Код приложения будем постепенно наращивать по мере выполнения упражнений рассматриваемой темы.

Глаз человека и оптические системы

Если не предпринимать специальных мер, то сцена с нарисованными объектами будет казаться неестественной, картинка не будет передавать пространственного характера смоделированных объектов. Плохое качество изображения объясняется тем, что при формировании поверхность объекта заливается одним и тем же цветом. Про реалистичное отображенияе объекта говорят, что цвет на нем имеет множество градаций или оттенков ( shades - тени).

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

Упрощенная структура глаза человека показана на рисунке.


Свет попадает в глаз через роговицу и хрусталик (своего рода линзу). Прозрачная роговица защищает хрусталик от повреждений. Радужная оболочка глаза играет роль диафрагмы, регулируя количество пропускаемого внутрь света (регулирует интенсивность освещения внутренней части глаза). Хрусталик проецирует изображение на двухмерную поверхность сетчатки - тыльной стороны глазного яблока. Расположенные на сетчатке фоточувствительные зрительные клетки - палочки и колбочки - играют роль приемников видимого спектра света в диапазоне длины волны 390 - 720 нанометров.

Палочки являются высокочувствительными приемниками излучения и функционируют в условиях слабого освещения (ночью), колбочки - при дневном освещении. Колбочки делятся на три цветовые группы, каждая из которых лучше воспринимает красный, зеленый и синий ( RGB - модель ). Смесь в разных пропорциях этих трех базовых цветов дает всю цветовую гамму цветов.

При цветовосприятии сказывается двойственная природа света.С одной стороны, свет - это электромагнитные волны с видимым спектром, равным цветам радуги. Вспомним школьную "запоминалку": Каждый Охотник Желает Знать Где Сидит Фазан (Красный-Оранжевый-Желтый-Зеленый-Голубой-Синий-Фиолетовый). На рисунке в центре приведена видимая часть спектра света, по краям которой расположены области света, невидимые невооруженным приборами глазом.

С другой стороны, свет представляют как частицу - фотон. Любой объект, освещаемый реальным источником света, бомбардируется миллиардами фотонов, как частиц света. Любой материал поверхности освещаемого объекта частично поглащает, а частично отражает фотоны разных частот видимого спектра (разного цвета). При взгляде на физическую поверхность глаз воспринимает совокупный цвет каждой точки этой поверхности в зависимости от распределения энергии отраженных фотонов, попадающих на сетчатку глаза и раздражающих ее.

Различные поверхности могут иметь разные свойства: блестящие поверхности отражают почти весь свет в нужных направлениях, матовые поверхности рассеивают фотоны равномерно в разные стороны. В OpenGL применяется один из двух цветовых режимов: RGB и режим индексации цвета. Если говорить более точно, то вместо RGB применяется модель цвета RGBA, где последняя буква аббревиатуры означает Alpha - канал. Альфа - канал задает прозрачность освещаемых объектов: 1 - абсолютно непрозрачный (opacity), 0 - абсолютно прозрачный (transparency).