Bump Mapping - GLScene для Delphi - Ігрові движки для мов програмування - Статті - Створення

Ось ми вже відкрили делфі і створили новий додаток. Що не створив? Ану швидко, не відставай, я диктую швидко))). На форму поставили GLScene1, GLSceneViewer1, GLBumpShader1, GLMmaterialLibrary. У Uses написали: JPEG, тому що ми використовуватимемо текстури у форматі ЖПЕГ. Ну це не означає, що Ви не можете використовувати інші формати)). Ось ще одна примітка: текстура і бамп-текстура повинні бути однакового розміру, я маю на увазі піксклі, наприклад 256х256 та 256х256 тощо. Ну створимо припустимо найпростішу сценку: кулька, даммікуб, план, джерело світла та камеру яка спрямована на кульку. Думаю, Ви знаєте як це зробити)) У процедурі OnFormCreate пишемо:

procedure TForm1.FormCreate(Sender: TObject); var map,bumpmap:TGLLibMaterial; begin

bumpmap:=GLMaterialLibrary1.Materials.Add; bumpmap.Material.Texture.Image.LoadFromFile('textures/ground_bump.jpg'); bumpmap.Material.Texture.Disabled:=false; bumpmap.Name:='Bump_MAP'; bumpmap.Material.Texture.TextureFormat:=TFNormalmap; bumpmap.Shader:=GlBumpshader1;

map:=GLMaterialLibrary1.Materials.Add; map.Name:='mat'; map.Material.Texture.Image.LoadFromFile('textures/ground.jpg'); map.Material.Texture.Disabled:=false;

Ну ось, це майже і є бамп, але майже, ще треба пояснити що означає і налаштування шейдера. Поясню:

map,bumpmap:TGLLibMaterial; – цим ми даємо назви нашим матеріалам. bumpmap:=GLMaterialLibrary1.Materials.Add; - це ми додаємо матеріал до бібліотеки матеріалів GLMmaterialLibrary1. textures/ground_bump.jpg - це шлях до картинки, у Вас він може бути інший))) bumpmap.Name:='Bump_MAP'; - цим ми задаємо ім'я матеріалу до бібліотеки матеріалів. bumpmap.Material.Texture.TextureFormat:=TFNormalmap; - цим ми показуємо що ця текстура - карта нормалей, зауважте, що бамп карта може бути і карта висот і карта нормалей, різниці не буде.

map:=GLMaterialLibrary1.Materials.Add; map.Name:='mat'; map.Material.Texture.Image.LoadFromFile('textures/ground.jpg'); map.Material.Texture.Disabled:=false;

Ось цією (вищою) всією писаниною ми вантажимо звичайну текстуру. bumpmat.Texture2Name:=mat.Name; - цим текстура налагоджується другого шар матеріалу.

Ну а цим ми застосовуємо об'єкт всю ту вище написану писанину (текстуру і бамп).

Ось ми дійшли до налаштувань шейдера, я напишу ті налаштування, які, на мене, найкращі, а так Ви можете поексперементувати самі. У ObjectInspector шейдера налаштовуємо:

BumpMethod: bmBasicARBFP у BumpOptions навпроти boDiffuseTexture2 ставимо True - цим ми дклаємо видну звичайну текстуру. Решта не чіпаємо. BumpSpace: bsObject SpecularMode: smOff

Все інше про що не йшлося не чіпаємо!

Всі! Ваш бамп зроблено! Тепер можна відкомпілювати програму та подивитися що вийшло. До речі, все те, що ми писали, можна зробити в ObjectInspector'e, але кодом набагато краще, а то з'являтимуться різні баги тощо.