; ; ------------------------------------------------------------ ; ; PureBasic - VertexAnimation ; ; (c) Fantaisie Software ; ; ------------------------------------------------------------ ; ; shapekey.mesh + shapekey.material done by blendman, thanks :) ; Используйте клавши [PageUp] и [PageDown] IncludeFile #PB_Compiler_Home + "examples/3d/Screen3DRequester.pb" Define.f MouseX, MouseY, Influence #Mesh = 1 Macro Clamp(num, min, max) If num<min num=min ElseIf num>max num=max EndIf EndMacro If InitEngine3D(3) Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Textures", #PB_3DArchive_FileSystem) Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Models", #PB_3DArchive_FileSystem) Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Scripts", #PB_3DArchive_FileSystem) Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Packs/desert.zip", #PB_3DArchive_Zip) Parse3DScripts() InitSprite() InitKeyboard() InitMouse() If Screen3DRequester() WorldShadows(#PB_Shadow_Modulative) ; Земля (Ground) ; CreateMaterial(0, LoadTexture(0, "Dirt.jpg")) CreatePlane(0, 1500, 1500, 40, 40, 15, 15) CreateEntity(0,MeshID(0),MaterialID(0)) ; Сетка (Mesh) LoadMesh(#Mesh, "Shapekey.mesh") ; Создание состояния для анимации "Kube" Track = 0 KeyFrame = 0 PoseIndex = 0 Animation$ = "Kube" CreateVertexAnimation(#Mesh, Animation$, 0) ; Создать анимацию "Kube" CreateVertexTrack(#Mesh, Animation$, Track) ; Создать трек для этой анимации CreateVertexPoseKeyFrame(#Mesh, Animation$, Track, KeyFrame); Создать ключевой кадр для этого трека. ; Сущность (Entity) CreateEntity(1, MeshID(#Mesh), #PB_Material_None, 0, 50, 0) ScaleEntity(1, 3, 3, 3) StartEntityAnimation(1, Animation$) ; Скайбокс (SkyBox) SkyBox("Desert07.jpg") ; - Камера CreateCamera(0, 0, 0, 100, 100) MoveCamera(0, 10, EntityY(1) + 4, -10, #PB_Absolute) CameraLookAt(0, EntityX(1), EntityY(1), EntityZ(1)) ; - Свет CreateLight(0, RGB(255, 255, 255), -40, 100, 80) AmbientColor(RGB(80, 80, 80)) Repeat Screen3DEvents() If ExamineMouse() MouseX = -MouseDeltaX()/10 MouseY = -MouseDeltaY()/10 EndIf If ExamineKeyboard() If KeyboardPushed(#PB_Key_PageDown) And Influence < 1 Influence + 0.01 Clamp(Influence, 0, 1) ElseIf KeyboardPushed(#PB_Key_PageUp) And Influence > 0 Influence - 0.01 Clamp(Influence, 0, 1) EndIf EndIf ; обновить ссылку на Позу (с изменённым параметром влияния) UpdateVertexPoseReference(#Mesh, Animation$, Track, KeyFrame, PoseIndex, Influence) ; обновить состояние анимации, так как мы управляем ей вручную UpdateEntityAnimation(1, Animation$) RotateCamera(0, MouseY, MouseX, 0, #PB_Relative) RenderWorld() FlipBuffers() Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1 EndIf Else MessageRequester("Ошибка", "3D Движок не может быть инициализирован",0) EndIf End