Освещение

Последнее обновление: 13.03.2016

Установив геометрию и настроив внешний вид объекта, мы можем задать освещение. Без освещения мы бы не могли увидеть объект, кроме того, освещение также влияет на внешний вид, а именно на цвет объекта, наравне с материалами. В WPF система освещения призвана имитировать свет в окружающем нас мире. В то же время эта имитация все-таки далека от реальной. Так, свет отраженный от одного объекта, не будет виден на другом объекте. Также объекты не обрасывают на другие объекты тени.

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

Для определения света в WPF используется базовый класс Light, но в реальности мы будем работать с производными от него классами:

  • DirectionalLight: создает прямые параллельные лучи, которые идут в направлении, указанном в свойстве Direction. В качестве примера подобного источника света можно привести солнце.

  • AmbientLight: создает источник рассеянного света. Свет исходит со всех сторон и равномерно покрывает поверхность объекта

  • PointLight: создает точечный источник света.

  • SpotLight: создает источник, который испускает свет на трехмерную сцену по конусу.

DirectionalLight

Для установки освещения в прошлой теме мы использовали объект DirectionalLight:

<ModelVisual3D>
    <ModelVisual3D.Content>
        <DirectionalLight Color="White" Direction="-1,-1,-2" />
    </ModelVisual3D.Content>
</ModelVisual3D>

Использованный нами в примере источник освещения задает вектор направления света. Он начинается в точке (0,0,0) и направлен в точку (-1,-1,-2). При этом нам важен угол падения света, а не длина вектора, которая может быть и (-2,-2,-4), но будет означать то же самое, что и направление вектора (-1,-1,-2), поскольку оба вектора эквивалентны.

AmbientLight

Представляет рассеяный свет. Также широко распространенный источник света.

 <AmbientLight Color="Yellow" />

Кроме того, для создания рассеянного света мы можем использовать свойство AmbientColor у объекта DiffuseMaterial:

 <DiffuseMaterial Brush="LightCoral" AmbientColor="Yellow" />
Рассеянный свет AmbientLight в WPF

PointLight

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

 <PointLight Color="White" Position="0,0.8,0.25" />
PointLight в WPF

SpotLight

Данный источник света похож на PointLight, также лучи света направлены в одну точку, только теперь освещенность ограничивается углом, который определяется конусом:

<SpotLight Color="White" Position="1,0.2,0.5"
        Direction="-0.5,-0.5,-0.5" InnerConeAngle="45" OuterConeAngle="90" />
SpotLight в WPF

Свойства InnerConeAngle и OuterConeAngle определяют форму конуса, используемого для определения освещенности. Если эти свойства равны, то фактически мы получаем стандартный точечный свет PointLight. А свойства Position и Direction также указывают соответственно на положение источника света и направление света.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850