Другой параметр, величину которого также
Другой параметр, величину которого также можно регулировать, — затухание. Он влияет на убывание интенсивности света с расстоянием. В квадратное уравнение, определяющее интенсивность света, входят три параметра. В документации по DirectSD они названы постоянной, линейной и квадратичной составляющими. По умолчанию им присваиваются значения 1, 0 и 0 соответственно — интенсивность света от такого источника не убывает с расстоянием. Уравнение, определяющее величину затухания, выглядит следующим образом:
а = с + Id + qd2,
где а — величина затухания; с — постоянная составляющая; 1 — линейная составляющая; d — расстояние от источника света, a q — квадратичная составляющая. Для того чтобы изменить затухание источника света, можно воспользоваться функцией C3dlight::SetAttenuation.
Хватит разговоров — давайте программировать
Хорошо, что вы меня остановили! Я заговорил на свою любимую тему, о физике, а подобных вещей никогда не следует допускать. Вы даже не успеете понять, что случилось, а я уже начну разглагольствовать о дифракционных решетках и волновых пакетах.
Поскольку программная реализация источников света выглядит довольно просто и не сильно отличается для различных типов освещения, я приведу код только для создания параллельно-точечного источника света на Рисунок 10-4.
void CMainFrame::OnEditParlight() {
C3dParPtLight* pLight = new CSdParPtLight;
pLight-»Create (1, 1, 1);
m_pCurLight = pLight;
// Создать фигуру, изображающую источник света C3dShape* psi = new C3dShape;
psl-»CreateCube (0.2) ;
// Присоединить источник света в качестве потомка фигуры,
242 аШУ Глава 10. Свет и тень
// чтобы его можно было выбрать psl-»AddChild(pLight) ;
// Присоединить источник света к макету m_pScene-»AddChild(psl) ;
m pScene-»m_ShapeList. Append (psi) ;
m pScene-»m_ShapeList. Append (pLight) ;
// Поместить источник света на видном месте psl-»SetPosition(0, 1, -2);
psl-»SetName ("Parallel Point Light");
MakeCurrent(psi) ;
}
Большая часть этого фрагмента не имеет никакого отношения к созданию самого источника света, но мы все равно рассмотрим его. В начальных строках функции определяется источник света — в данном случае объект CSdParPtLight. Чтобы показать расположение источника света в макете, я создал фигуру и присоединил к ней источник в качестве потомка, чтобы они перемещались вместе. Классы фигуры и источника света являются производными от CSdFrame. Это позволяет включить их в список фигур макета, чтобы они были удалены во время уничтожения всего макета. Остается лишь задать положение источника света в макете. Для направленного источника света следовало бы задать направление, а для зонального — как направление, так и положение.
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий