Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
комп графика Лекции.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
200.48 Кб
Скачать

2.3 Освещение объектов

Световая энергия, падая на поверхность объекта, частично поглощается, а частично отражается или пропускается. Если объект поглощает только определённые длинны волн, то у света исходящего от этого объекта изменяется распределение энергий и объект выглядит цветным. Такое отражение называется диффузным. Если отражённый от объекта свет содержит все компоненты в тех же пропорциях, что и свет источника, то такое отражение называется зеркальным.

2.3.1 Свойства диффузного отражения

Интенсивность света при диффузном отражении описывается уравнением Ламберта

(1)

Где Id –интенсивность отражённого света;

Kd – коэффициент диффузного отражения;

Θ –угол между направлением на источник света и внешней нормалью.

Из уравнения (1) видно, что интенсивность отражённого света при диффузном отражении не зависит от положения наблюдателя, то есть распространяется во все стороны с одинаковой интенсивностью. Зависимость интенсивности отраженного света от угла падения Θ связана с тем, что от этого угла зависит плотность светового потока, падающего на поверхность.

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

С учётом этого, уравнение (1), можно записать в виде

,

Где - скалярное произведение направляющего вектора на источник света и вектор внешней нормали к поверхности.

2.3.2 Свойства зеркального отражения

Зеркальное отражение это отражение самого луча, поэтому цвет отраженного луча такой же, как и у источника света.

От идеально отполированной поверхности луч отражается под углом падения

(3)

Т.к. цвет зеркально отражённого света соответствует цвету источника, то и коэффициенты отражения должны быть одинаковыми для всех компонент света.

(4) , где kr - коэффициенты отражения

Отражение от шероховатой поверхности

В этом случае поверхность представляется виде микро граней случайно ориентированных в пространстве с плотность вероятности заданной некоторой функцией D(α).

Функция D(α) в разных моделях может быть задана разными функциями. В OpenGL используется модель Фонга.

, где α угол между лучом, при идеальном отражении, и лучом, направленным на наблюдателя.

n – Некоторый заданный коэффициент.

Отражение от шероховатой поверхности, в компьютерной графике, задает блик. Чем больше n тем уже блик.

Так, например, если n=0, то при , блик виден в любом направлении. То есть блик сплошной.

А если n=100, то , то блик очень узок (приближается к отражению от идеально гладкой поверхности).

С учетом выше сказанного, формула (4), для шероховатой поверхности примет вид

(5) .

Лекция 3

3.1 Контекст воспроизведения

Контекст воспроизведения это ссылка на некоторую структуру, находящуюся в операционной системе, содержащую полную информацию о свойствах устройства вывода.

Описание этой структуры: PIXELFORMATDESCRIPTOR приведено в файле MyFormPixel, находящемся в папке Лаб0.

Для изменения параметров формата пикселя используется процедура: SetDCPixelFormat(hdc:HDC);

HDC (Handle Device Context).

Через hdc –передаётся адрес контекста воспроизведения, устройства, на которое должен осуществляться вывод графической информации.

//========== Формат пикселя ======================

procedure SetDCPixelFormat (hdc : HDC);

var

pfd : TPixelFormatDescriptor;

nPixelFormat : Integer;

begin

FillChar (pfd, SizeOf (pfd), 0); // Очистка структуры pfd

pfd.dwFlags := PFD_DOUBLEBUFFER; //задаем флаг двойной буфферизации

nPixelFormat := ChoosePixelFormat (hdc, @pfd);// Ищет наилучший формат

// пиксела, подходящий к контексту воспроизведения hdc.

SetPixelFormat (hdc, nPixelFormat, @pfd); //Устанавливает формат пикселя

end;

Примечание.

Значения флагов задаются через булевскую функцию дизъюнкции. Например:

PFD_DOUBLEBUFFER or PFD_SUPPORT_OPENGL

//======================================================

Вызов процедуры задания формата пикселя, целесообразно, задать сразу же при создании формы

procedure TfrmGL.FormCreate(Sender: TObject);

begin

DC := GetDC (Handle); // получаем ссылку на текущий контекст воспроизведения

SetDCPixelFormat(DC); // вносим изменения в контекст воспроизведения

hrc := wglCreateContext(DC); // в OpenGL передаём новый контекст воспроизведения

end;

//===========================================================

Таким образом, в структуре hrc записывается новый, отредактированный формат пикселя.

Если мы вывод графической информации собираемся осуществлять на форму, то свойство Canvas.Handle (графический режим работы формы), необходимо связать со структурой hrc. Это выполняется командой: wglMakeCurrent(Canvas.Handle, hrc); - контекст воспроизведения задается текущим. Эту команду целесообразно записать в FormCreate, сразу после команды определения hrc.

После окончания работы контекст воспроизведения следует освободить. Для этого в процедуре FormDestroy, следует выполнить команды:

wglMakeCurrent (0, 0);

wglDeleteContext(hrc);