Опубликован: 02.12.2011 | Доступ: свободный | Студентов: 980 / 117 | Оценка: 5.00 / 4.00 | Длительность: 09:26:00
Специальности: Программист
Теги: .net, open source, opengl
Лекция 8:

Свойства источника света

< Лекция 7 || Лекция 8: 12 || Лекция 9 >
Аннотация: В лекции рассматриваются свойства источников света библиотеки OpenGL.

Цель лекции: Изучить команды OpenGL изменения свойств источников света, реализацию этих команд на Object Pascal и в библиотеке OpenTK на C#.

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

Для задания параметров источника света используется команда:

Light[if][v](light, pname: GLenum; param: GLType);

Параметры команды имеют следующие значения:

  • light - источник света;
  • pname - изменяемый параметр материала;
  • param – значение или указатель на массив значений изменяемого параметра.

Ниже приведены объявления методов класса GL библиотеки OpenTK на C# и процедур на Object Pascal, реализующих команду Light, для параметра param вещественного типа.

C#:
  void Light(LightName light, LightParameter pname, float param);
  void Light(LightName light, LightParameter pname, float[] @params);
Object Pascal:
  procedure glLightf (light, pname: GLenum; param: GLfloat);
  procedure glLightfv (light, pname: GLenum; params: PGLfloat);

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

Кроме того, для источника света могут быть определены положение источника света, сфокусированность, направленность, зависимость интенсивности освещения от расстояния до освещаемого объекта.

Результирующее освещение примитива зависит от свойств источников света и от свойств материала примитива.

Рассеянная (Ambient) составляющая освещения примитива от одного источника света представляет собой произведение рассеянной составляющей этого источника света и рассеянной составляющей материала:

A=A_{ист.света} \times A_{материала}

Диффузная (Diffuse) составляющая зависит не только от соответствующих составляющих источника света и материала, но и от косинуса угла между направлением нормали и направлением от вершины к источнику света:

D=(max(\vec{L} \times \vec{N},0))\times D_{ист.света}\times D_{материала}

\vec{L}\times(Lx,Ly,Lz) единичный вектор от вершины к источнику света;

\vec{N}\times(nx,ny,nz) единичный вектор нормали.

Зеркальная составляющая также зависит от соответствующих составляющих источника света и материала, нормали и вектора от вершины к источнику света, точки наблюдения, а так же от значения параметра SHININESS, который определяется для материала.

S=(max(\vec{S} \times \vec{N},0))^{shininess}\times S_{ист.света}\times S_{материала}

где

  • SHININESS –зеркальная экспонента материала;
  • \vec{L} – вектор от вершины к источнику света;
  • \vec{V} – вектор от вершины к точке наблюдения;
  • \vec{S} – вектор, который равен нормированной сумме векторов \vec{L} и \vec{V}.

Ослабление источника света с увеличением расстояния до объекта библиотека OpenGL определяет по формуле:

S=\frac{1}{k_0+k_1\times l+k_2\times l^2

где:

l - расстояние от источника света до объекта;

k_0 – коэффициент постоянного ослабления;

k_1 – коэффициент линейного ослабления;

k_2 – коэффициент квадратичного ослабления.

Фоновая составляющая освещения источника света

Определение фоновой составляющей освещения осуществляется с помощью параметра pname команды Light. При использовании библиотеки OpenTK (C#) параметр должен быть равен значению Ambient перечисления LightParameter, в Object Pascal - константе GL_AMBIENT.

На C# параметр param является массивом четырёх вещественных значений, содержащих RGBA составляющие фонового освещения.

В Object Pascal параметр param является указателем на массив из четырех значений, которые также определяют RGBA составляющие фонового освещения.

Примеры изменения фоновой составляющей приведены в листинге 7.1 - на C# и в листинге 7.2 - на Object Pascal.

GL.Light(LightName.Light0, LightParameter.Ambient, new float[] {0.1f, 0.0f, 0.0f, 1.0f});
Листинг 7.1. Пример изменения фоновой составляющей источника света на C#
Var
  params: TGLArrayf4;
Begin
…
  params[0] := 1;
  params[1] := 0;
  params[2] := 0;
  params[3] := 1;
  glLightfv(GL_LIGHT0, GL_AMBIENT, @params);
…
End;
Листинг 7.2. Пример изменения фоновой составляющей источника света на Object Pascal

По умолчанию значение фонового освещения для всех источников света равно (0, 0, 0, 1).

Диффузная составляющая освещения источника света

Для изменения диффузной составляющей источника света используется значение параметра pname команды Light:

C#:
  LightParameter.Diffuse
Object Pascal:
  GL_DIFFUSE

По умолчанию значение диффузного освещения "нулевого" источника света равно (1, 1, 1, 1), для других источников света составляющая равна (0, 0, 0, 1).

< Лекция 7 || Лекция 8: 12 || Лекция 9 >
Владислав Нагорный
Владислав Нагорный

Подскажите, пожалуйста, планируете ли вы возобновление программ высшего образования? Если да, есть ли какие-то примерные сроки?

Спасибо!

Лариса Парфенова
Лариса Парфенова

1) Можно ли экстерном получить второе высшее образование "Программная инженерия" ?

2) Трудоустраиваете ли Вы выпускников?

3) Можно ли с Вашим дипломом поступить в аспирантуру?