Textures Animées
Publié : mer. 22/févr./2023 14:10
PureBasic 6.0 apporte une nouvelle fonctionnalité : L'animation de textures.
CreateAnimatedMaterial(#Matiere, Texture(), Duree.f)
Aide https://www.purebasic.com/french/docume ... erial.html
■ Comment faire ?
-Indiquez à votre code ou se trouve les textures. Nous allons nous servir des textures d'eau figurant dans le dossier d'installation de PureBasic
-Dans une boucle, charger les textures dans un tableaux.
Exemple : 32 textures numérotés de Caustics_0.bmp à Caustics_31.bmp
-Crée une nouvelle matière animée à l'aide des textures spécifiées.
Le dernier paramètre correspond à la durée de l'animation en secondes.
-Et enfin appliquer la matière à une entité.
Un exemple de code fonctionnel utilisant les assets se trouvant dans le dossier d'installation de PureBasic.
Touche Escape ou Souris bouton du milieu pour quitter.
CreateAnimatedMaterial(#Matiere, Texture(), Duree.f)
Aide https://www.purebasic.com/french/docume ... erial.html
■ Comment faire ?
-Indiquez à votre code ou se trouve les textures. Nous allons nous servir des textures d'eau figurant dans le dossier d'installation de PureBasic
Code : Tout sélectionner
Add3DArchive(#PB_Compiler_Home + "Examples\3D\Data\Water" , #PB_3DArchive_FileSystem)
Exemple : 32 textures numérotés de Caustics_0.bmp à Caustics_31.bmp
Code : Tout sélectionner
For n = 0 To 31
Textures(n) = TextureID(LoadTexture(#PB_Any, "Caustics_" + Str(n) + ".bmp"))
Next
Code : Tout sélectionner
CreateAnimatedMaterial(0, Textures(), 3)
Le dernier paramètre correspond à la durée de l'animation en secondes.
-Et enfin appliquer la matière à une entité.
Code : Tout sélectionner
CreatePlane(0, 1000, 1000, 100, 100, 80, 80)
CreateEntity(0, MeshID(0), MaterialID(0))
Code : Tout sélectionner
; PureBasic 6.0
EnableExplicit
; Caméras
Global Camera, Rot.f
; Texture
Global Dim Textures(31), n
; DeltaTime
Global dt.f
; Initialisatio environnement 3D
ExamineDesktops()
InitEngine3D(#PB_Engine3D_DebugLog) : InitSprite() : InitKeyboard() : InitMouse()
OpenScreen(DesktopWidth(0), DesktopHeight(0), 32, "Textures animées")
; Localisation des assets
Add3DArchive(#PB_Compiler_Home + "Examples/3D/Data/Packs/desert.zip", #PB_3DArchive_Zip)
Add3DArchive(#PB_Compiler_Home + "Examples\3D\Data\Water" , #PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home + "examples\3D\Data\Textures", #PB_3DArchive_FileSystem)
; Un peu de lumiere
CreateLight(#PB_Any, RGB(255, 255, 255), 10, 1000, 10)
; Le ciel
SkyBox("desert07.jpg")
; Un sol (ID 0)
CreateMaterial(0, TextureID(LoadTexture(#PB_Any, "soil_wall.jpg")))
CreatePlane(0, 1000, 1000, 100, 100, 20, 20)
CreateEntity(0, MeshID(0), MaterialID(0))
; L'eau (ID 1)
; Chargement des textures
; 32 textures numérotés de Caustics_0.bmp à Caustics_31.bmp
For n = 0 To 31
Textures(n) = TextureID(LoadTexture(#PB_Any, "Caustics_" + Str(n) + ".bmp"))
Next
; Crée une nouvelle matière animée à l'aide des textures spécifiées.
CreateAnimatedMaterial(1, Textures(), 3)
; Un peu de couleur
MaterialBlendingMode(1, #PB_Material_AlphaBlend)
SetMaterialColor(1, #PB_Material_DiffuseColor, RGBA(0, 0, 255, 200))
; Appliquer la matiere sur une entité.
CreatePlane(1, 1000, 1000, 100, 100, 40, 40)
CreateEntity(1, MeshID(1), MaterialID(1), 0, 0.5, 0)
; Camera
Camera = CreateCamera(#PB_Any, 0, 0, 100, 100)
; Boucle 3D
Repeat
ExamineKeyboard()
ExamineMouse()
; Rotation de la camera principale
Rot + 0.1*dt
MoveCamera(Camera, Cos(Rot)*50, 15, Sin(Rot)*50, #PB_Absolute)
CameraLookAt(Camera, 0, 0, 0)
; Rendering
dt = RenderWorld()/1000
FlipBuffers()
Until KeyboardReleased(#PB_Key_Escape) Or MouseButton(#PB_MouseButton_Middle)