Сделать стартовой    

 
Welcome to www.kupper-hip.narod.ru 1
  1
1
navigation
Статистика

footer
Статья по GLScene №2(Наглядные примеры)
Наглядные примеры
Примеры работы с GLScene

1. Использование библиотеки материалов
С помощью компонента GLMaterialLibrary в памяти хранятся текстуры и материалы – это могут быть загружаемые BMP/JPEG-изображения или создаваемые в памяти растровые изображения.
Для каждого материала задается его название и ряд дополнительных параметров: отражение, доступность, текстурные координаты и др.
with GLMatLibrary.Materials.Add do
begin
Name := 'light';
Material.Texture.Image.LoadFromFile('textureslight.jpg');
Material.Texture.TextureMode:=tmModulate;
Material.BlendingMode := bmTransparency;
Material.Texture.Disabled := False;
end;
Текстура может быть создана и в оперативной памяти с помощью стандартного объекта TBitmap:
texturebw:=TBitmap.Create;
texturebw.Width := 32;
texturebw.Height := 32;
for i:=0 to 31 do for j:=0 to 31 do
if Random<0.5 then texturebw.Canvas.Pixels[i,j]:=clSilver
else texturebw.Canvas.Pixels[i,j]:=clWhite;
with GLMatLibrary.Materials.Add do
begin
Name := 'bw';
Material.Texture.Image.Assign(texturebw);
Material.Texture.TextureMode:=tmModulate;
Material.Texture.Disabled := False;
end;

2. Описание и обработка коллизий для объектов GLSphere
// CollisionManagerObjects – менеджер коллизий
if GLSphere.Behaviours.CanAdd(TGLBCollision) then
begin
myCollision:=TGLBCollision.Create(nil);
myCollision.Manager := CollisionManagerObjects;
myCollision.BoundingMode := cbmSphere;
GLSphere.Behaviours.Add(myCollision);
end;
В событии OnProgress объекта GLCadencer:
CollisionManagerObjects.CheckCollisions;
Событию OnCollision менеджера коллизий передаются ссылки на два столкнувшихся объекта object1,object2, можно анализировать тип, тег, класс объекта:
if object1.classname='TGLSphere' Then ShowMessage('столкновение со сферой');
if object2.Tag=100 Then object2.Visible:=False; // скрытие объекта

3. Выбор объекта мышкой
Нажата мышка в окне GLScreenViewer или GLFullScreenViewer, как определить какой объект выделить? Это можно с помощью следующего кода:
В событии onmousedown или onmouseup описать следующий код:
// pick – переменная класса TGLCustomSceneObject
pick:=(GLScreenViewer1.Buffer.GetPickedObject(x, y) as TGLCustomSceneObject);
После этого можно анализировать тип объекта и вызывать те или иные процедуры для управления выбранным объектом.

4. Вывод надписей
Текстовые надписи создаются, как и другие объекты GLScene, но прежде надо загрузить в память шрифт, а при использовании растрового шрифта задать соответствие между кодами символов и положением их в графическом файле.
GLBitmapFont.Glyphs.LoadFromFile('textures/toonfont.bmp');
Текстовую надпись можно масштабировать, вращать, задавать прозрачность и перемещать по координатам X,Y.
GLMyText :=TGLHUDText(GLDummyText.AddNewChild(TGLHUDText));
GLMyText.BitmapFont := GLBitmapFont;
GLMyText.Text := 'TEXT';
GLMyText.Position.SetPoint(10,470,0);
GLMyText.ModulateColor.Color := clrSilver;
GLMyText.ModulateColor.Alpha := 0.5;
GLMyText.Scale.SetVector(0.6,0.8,1);

5. Отображение FPS
Число кадров в секунду возвращает функция FramesPerSecond объекта GLSceneViewer. Добавив в форму компонент Timer, надо в событии OnTimer ввести две строки – значение FPS появляется в заголовке окна; эти строки можно включить в обработчик события от Таймера, предварительно добавив объект Timer в форму:
Caption:=Format('%.1f FPS', [GLSceneViewer1.FramesPerSecond]);
GLSceneViewer1.ResetPerformanceMonitor;

6. Анимация 3D-персонажей
GLScene поддерживает анимацию 3D-моделей. Соответствующие объекты создаются аналогично: инициализировать переменную, загрузить модуль, выбрать анимацию и способ ее повтора:
GLActorMain.LoadFromFile('models/goblin.md2');
GLActorMain.AnimationMode:=aamLoop;
GLActorMain.Interval:=100;
// можно использовать номер или символьный идентификатор
GLActorMain.SwitchToAnimation(0);
При переключении анимации можно проверить завершилась ли текущая (newani – новая анимация, символьный идентификатор):
if GLActorMain.CurrentAnimation<>newani then GLActorMain.SwitchToAnimation(newani);

7. Спецэффекты огня
Партиклы можно привязывать к любому объекту GLScene. Настройка свойств соответствующих менеджеров выполняется просто – к примеру, для огня задается радиус, параметры цвета, число частиц, направление огня и обязательно указывается объект GLCadencer, обновляющий состояние сцены:
myFire := TGLFireFXManager.Create(self);
myFire.OuterColor.Red := 0.9;
myFire.FireRadius := 2;
myFire.ParticleSize := 1;
myFire.ParticleLife := 1;
myFire.MaxParticles := 512;
myFire.Cadencer := GLCadencer1;
myFire.InitialDir.SetVector(0,1,0);
На втором этапе эффект добавляется к объекту.
if GLSphere.Effects.CanAdd(TGLBFireFX) then
begin
myFireFX := TGLBFireFX.Create(nil);
PickFire.Effects.Add(myFireFX);
myFire.InnerColor.Color:= clrGreen;
myFire.OuterColor.Color:= clrYellow;
myFireFX.Manager := myFire;
myFire.Disabled := False;
end;
В завершении можно организовать взрыв, определив его минимальную и максимальную начальную скорости и мощность; эту функцию можно вызвать из события OnProgress объекта GLCadencer:
myFire.IsotropicExplosion(4, 6, 5);
Надеюсь, эти примеры помогут получше узнать GLScene.

footer
Партнёры

 

 

footer
Наш баннер
  • Если вы хотите поставить мою кнопочку на свой сайт:
  • footer
    Design by KuPPeR
    Hosted by uCoz