В этой статье я хочу подробно рассказать как пользоваться БампМэппингом в GLScene. Начну с того что этот бамп который мы будем использовать не самый скоростной, лучше конечно будет есле написать свой GLSL шейдер. Но что ж поделаешь, этот шейдер максимум что может из себя выжать, так это 500-600 FPS при малом количестве обьектов, настроек у него мало... Начнём... Вот мы уже открыли делфи и создали новое приложение. Что не создал? Ану быстро, не отставай, я диктую быстро))). На форму поставили GLScene1, GLSceneViewer1, GLBumpShader1, GLMaterialLibrary. В 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; bumpmat.Texture2Name:=mat.Name; GLSphere1.Material.MaterialLibrary:=GLMaterialLibrary1; GLSphere1.Material.LibMaterialName:=bumpmap.Name; end; Ну вот, это почти и есть бамп, но почти, ещё нада обьяснить что что значит и настройки шейдера. Обьясняю: map,bumpmap:TGLLibMaterial; - этим мы даём названия нашим материалам. bumpmap:=GLMaterialLibrary1.Materials.Add; - это мы добавляем материал в библиотеку материалов GLMaterialLibrary1. 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; - этим текстура налажывается на второй слой материала. GLSphere1.Material.MaterialLibrary:=GLMaterialLibrary1; GLSphere1.Material.LibMaterialName:=bumpmap.Name; Ну а этим мы применяем обьекту всю ту выше написанную писанину (текстуру и бамп). Вот мы дошли до настроек шейдера, я напишу те настройки которые, по мне, самые лучшие, а так Вы можете поэксперементировать сами. В ObjectInspector шейдера настраиваем: BumpMethod: bmBasicARBFP в BumpOptions напротив boDiffuseTexture2 ставим True - этим мы дклаем видной обычную текстуру. Все остальные не трогаем. BumpSpace: bsObject SpecularMode: smOff Всё остальное о чём речь не шла не трогаем! Всё! Ваш бамп сделан! Теперь можно откомпилировать приложение и посмотреть что получилось. Кстати, всё то что мы писали, можно сделать в ObjectInspector'e, но кодом гораздо лучше, ато будут появляться разные баги и тому подобное...
|