Главная » Статьи » GLScene » Эффекты

Тени ShadowVolume
В GLScene есть три вида теней: Shadowplane, Shadowvolume и Shadowmaps.
Но из этих трёх видов самый лучший Shadowvolume, ща расскажк почему.
Shadowplane - это плоскость на которую падают тени от обьектов, и только на неё, на другие обьекты не падает. Shadowmaps - у них качество плохое, как в Counter-strike source (маленькое разрешение). Я выбрал Shadowvolume так как у них и качество хорошее, и на быстродействие не жалуемся.

Думаю пора начать...

Создайте в сцене несколько обьектов. Я создал Plane, Sphere и Cube. Разместите их так чтобы (будущая) тень падала от сферы на плоскость, а от куба на плоскость и сферу (это для примера, что тени падают "обьёмно"В).

Я сделал так:

Теперь добавте на сцену ещё AsyncTimer. В таймере у нас будут отображаться FPS.
В GLScene Editor все обьекты должны быть в Shadowvolumе, для этого создайте его и перетащите в него все имеющиеся обьекты.

В FormCreate пишем:

procedure TForm1.FormCreate(Sender: TObject);
begin
GLShadowVolume1.Active:=True;
end;

Вот этим мы разворачиваем форму на весь экран:
Form1.BorderStyle:=bsNone;
form1.WindowState:=wsMaximized;

В настройках Shadowvolume (Object Inspector), в разделе Lights выбираем источник света (GLlightsource1). А именно: откроется окно Editing Shadowvolume1.lights, в нём создаём новую закладку и в Object inspector, в её свойствах выбираем источник света.
Далее, там-же в настройках, залазим в Occluders и в открывшемся окне надо подобовлять все те обьекты которые будут отбрасывать тень и на которые тена будут падать.
Всё, вот мы настроили наши тени, но если сейчас откомпилировать программу, то, есле Вы всё сделали правильно, тени отображаться не должны. Исправим это...
Один раз клацаем на GLSceneViewer1 и в Object Inspector'е лезим в Buffer (если полее новая версия делфи то OpenGL>>Buffer)>>Context Options>>roStencilBuffer нужно поставить True. Всё, теперь тени будут отображаться!

Теперь, если Вам очень хочется узнать производительность теней, то создадим в GLScene1 в разделе HUDObjects GLHUDText1. На форму добавим ещё один модуль (GLWindowsBitmapFont1) и в настройках Худ текста в BitmapFont выберем наш GLWindowsBitmapFont1. Теперь с координатами 0,0 у нас в левом верхнем углу добавился обьект худ текст. Теперь сделаем так чтобы в этом тексте отображалось колиество кадров в секунду. В таймере пишем:

procedure TForm1.AsyncTimer1Timer(Sender: TObject);
begin
GLHudText1.Text := Format('%2.1f FPS,[GLSceneViewer1.FramesPerSecond]);
GLSceneViewer1.ResetPerformanceMonitor;
end;

Всё! Надеюсь эта статья помогла Вам в изучении GLScene!;)

Категория: Эффекты | Добавил: Samarik (19.06.2007) | Автор: Max E W
Просмотров: 2775 | Комментарии: 2 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа
Категории раздела
Наш опрос
Что в гоночных играх самое важное?
Всего ответов: 265
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0