Всегда охота подарить дорогому человеку уникальный подарок, а как говориться "Лучший подарок тот который сделал сам". Задача: Сделать интерактивную открытку с элементами 3д и слайд шоу. Писать все будем с помощью графической библиотеки GLScene для Delphi/Lazarus/Borland C++, так же желательно подобрать картинки для спрайтов в единой цветовой палитре. Шаг 1. Расставляем объекты. В проекте использоваться 3 спрайта. В первый мы загружаем фон , в второй рамку, а поверх неё уже фотографию. При использовании такой иерархии у нас не будет проблем с перекрытием. Шаг 2. Настраиваем основную сцену. Устанавливаем размеры, позиционирование и другие настройки при создании формы. \\Установим по центру GLSprite1.Position.X:=Form1.Width/2; GLSprite1.Position.Y:=Form1.Height/2; GLSprite1.Width:=Form1.Width; GLSprite1.Height:=Form1.Height; GLSprite1.Material.Texture.Disabled:=false; GLSprite1.Material.Texture.Image.LoadFromFile(ExtractFilePath(Application.ExeName)+'bg0.jpg'); GLHUDText1.Position.X:=Form1.Width/2; GLHUDText1.Position.Y:=Form1.Height/2+200; \\Загрузим модель цветка GLFreeForm1.Direction.SetVector(0,0.5,0); GLFreeForm1.Scale.SetVector(9,9,9); GLFreeForm1.LoadFromFile(ExtractFilePath(Application.ExeName)+'model.3ds'); GLMaterialLibrary1.TexturePaths:=ExtractFilePath(Application.ExeName); GLFreeForm1.MaterialLibrary:=GLMaterialLibrary1; \\Подготовим Фул Скрин GLFullScreenViewer1.Width:=Screen.Width; GLFullScreenViewer1.Height:=Screen.Height; TimeI:=0; \\Загрузим рамку и 1ую фотографию Ram.Width:=294; Ram.Height:=220; Ram.Position.X:=Form1.Width/2; Ram.Position.Y:=Form1.Height/2+190; Ram.Material.Texture.Disabled:=false; Ram.Material.Texture.Image.LoadFromFile(ExtractFilePath(Application.ExeName)+'ram.jpg'); Gallery.Position.X:=Form1.Width/2; Gallery.Position.Y:=Form1.Height/2+200; Gallery.Width:=210; Gallery.Height:=140; Gallery.Material.Texture.Disabled:=false; Gallery.Material.Texture.Image.LoadFromFile(ExtractFilePath(Application.ExeName)+'gall0.jpg'); Шаг 3. Делаем смену фоновой картинки. Принцип простой, в таймере увеличиваем переменную каждую секунду на 1, как только значение её равно 10 , мы меняем на следующую картинку (дописывая нужное значение к имени картинки) и так повторяем по кругу. TimeI:=TimeI+1; if TimeI=12 then begin if count<3 then Count:=Count+1 else count:=0; GLSprite1.Material.Texture.Image.LoadFromFile(ExtractFilePath(Application.ExeName)+'bg'+FloatToStr(count)+'.jpg'); TimeI:=0; end; Шаг 4. Шлифуем сцену. В принципе костяк готов, но хорошо бы добавить такие вещи как, вращение мышкой цветка, Фул Скрин, галерею. Фул скрин: \\ Пусть модель сама вращается GLFreeForm1.Turn(deltaTime); GLFreeForm1.Roll(deltaTime); \\ По нажатию на Enter активируем Фул Скрин if (IsKeyDown(#13)) then GLFullScreenViewer1.Active:=true \\Подгоним все на полно экранный режим if GLFullScreenViewer1.Active=true then begin GLSprite1.Width:=Screen.Width; GLSprite1.Height:=Screen.Height; GLSprite1.Position.X:=Screen.Width/2; GLSprite1.Position.Y:=Screen.Height/2; GLHUDText1.Position.X:=Screen.Width/2; GLHUDText1.Position.Y:=Screen.Height/2+200; end; Вращение модели: \\Что интересно если сделать так как кажеться логично будут искажения, так что меняем X и Y местами \\Сработат при зажатой Левой кнопки мыши if ssLeft in Shift then GLCamera1.MoveAroundTarget(mY-y,mX-x); mX:=x; mY:=y; Сделаем запуск с параметром, что бы можно было без галереи. if ParamStr(1)='gallery' then begin Ram.Visible:=true; Gallery.Visible:=true; end; И конечно нужно не забыть про Form Resize GLSprite1.Width:=Form1.Width; GLSprite1.Height:=Form1.Height; GLSprite1.Position.X:=Form1.Width/2; GLSprite1.Position.Y:=Form1.Height/2; Ram.Position.X:=Form1.Width/2; Ram.Position.Y:=Form1.Height/2+190; Gallery.Position.X:=Form1.Width/2; Gallery.Position.Y:=Form1.Height/2+190; В итоге получим что то вроде этого: Заключение. В заключение хочу сказать, что если вы сами поэкспериментируете то может получиться гораздо интереснее. Например можно добавить стандартные эффекты или подключить шейдеры.
|