faire de l'eau
faire de l'eau
salut voila jai fait un terrain ou il est prevue de metre des mar d'eau masi je ne trouev pas coment faire de l'eau qui soit de leau ... voila mon probleme merci de votre aide d'avance
la lib Xtrem3D permet de faire de l'eau http://purebasic.hmt-forum.com/viewtopic.php?t=1684
ou alors avec Irrlicht , l'exemple avec l'eau fonctionne très bien avec PureBasic.
L'inconvénient ,c'est plus compliqué à utiliser que les commandes 3D de PureBasic.Et il manque encore des trucs .
Donc finalement pour faire de l'eau avec les commandes de PB ,je n'ai aucune idée de la façon dont il faut procéder.
J'ai fait une tentative , pas terrible je te l'accorde
Tu trouveras le code ici
http://purebasic.hmt-forum.com/viewtopic.php?t=1830
en fait , je pense que tu peux te contenter de créer un mesh plan (c'est simplement 2 triangles ) .et tu colles une texture d'eau dessus.
Ensuite il faut jouer sur les paramètres Material pour approcher l'effet de l'eau mais là je n'ai aucune idée des bons paramètres , tâtonne, essaye avec :
DisableMaterialLighting
MaterialAmbientColor
MaterialBlendingMode
MaterialDiffuseColor
MaterialShadingMode
MaterialSpecularColor
Et pourquoi pas essayer de mettre deux plans l'un sur l'autre en faisant des effets de mouvements ?
RotateMaterial
ScrollMaterial
ça ne donnera peut-être pas grand chose , mais ne sachant pas vraiment comment faire , il faut bien expérimenter ,tu trouveras sûrement des effets intéressants pour autre chose au passage
Je m' étais bricolé un petit utilitaire pour expérimenter moi aussi
tu peux le trouver ici
http://purebasic.hmt-forum.com/viewtopi ... 5&start=28
Choisis Shading Mode > Flat , avec Gouraud rien ne s'affiche ?
L'objectif de cet utilitaire était de jouer avec tous les paramètres disponibles pour les lumières, les matières , etc , afin de trouver de bons effets.
ou alors avec Irrlicht , l'exemple avec l'eau fonctionne très bien avec PureBasic.
L'inconvénient ,c'est plus compliqué à utiliser que les commandes 3D de PureBasic.Et il manque encore des trucs .
Donc finalement pour faire de l'eau avec les commandes de PB ,je n'ai aucune idée de la façon dont il faut procéder.
J'ai fait une tentative , pas terrible je te l'accorde

Tu trouveras le code ici
http://purebasic.hmt-forum.com/viewtopic.php?t=1830
en fait , je pense que tu peux te contenter de créer un mesh plan (c'est simplement 2 triangles ) .et tu colles une texture d'eau dessus.
Ensuite il faut jouer sur les paramètres Material pour approcher l'effet de l'eau mais là je n'ai aucune idée des bons paramètres , tâtonne, essaye avec :
DisableMaterialLighting
MaterialAmbientColor
MaterialBlendingMode
MaterialDiffuseColor
MaterialShadingMode
MaterialSpecularColor
Et pourquoi pas essayer de mettre deux plans l'un sur l'autre en faisant des effets de mouvements ?
RotateMaterial
ScrollMaterial
ça ne donnera peut-être pas grand chose , mais ne sachant pas vraiment comment faire , il faut bien expérimenter ,tu trouveras sûrement des effets intéressants pour autre chose au passage

Je m' étais bricolé un petit utilitaire pour expérimenter moi aussi

tu peux le trouver ici
http://purebasic.hmt-forum.com/viewtopi ... 5&start=28
Choisis Shading Mode > Flat , avec Gouraud rien ne s'affiche ?
L'objectif de cet utilitaire était de jouer avec tous les paramètres disponibles pour les lumières, les matières , etc , afin de trouver de bons effets.
Tu trouveras un exemple d'une camera qui suit un objet à la même adresse que précédemment
http://purebasic.hmt-forum.com/viewtopic.php?t=1830
Le principe est simple , tu as besoin de connaitre l'angle de ton objet.
Comme pour l'instant les commandes de PureBasic ne permettent pas de connaitre cet angle , tu devras le gérer toi même , donc à chaque fois que tu tournes ton entity , mettons de 2° , tu tiens à jour l'angle de l'entity en y ajoutant 2°.
Alors tu as la position de l'entity , PureBasic te donne ces infos avec EntityX() , EntityY() , et EntityZ() .
Il te reste à faire un peu de trigo .
En calculant la position de ta caméra
PosXCamera.f = EntityX() + Cos( Angle * 0.0174533 ) * DistanceCamera
PosZCamera.f = EntityZ() - Sin( Angle * 0.0174533 ) * DistanceCamera
Et pour la hauteur de la camera
PosYCamera.f = EntityY() + HauteurCamera
Avec DistanceCamera = la distance à laquelle tu souhaites placer ta caméra
et HauteurCamera la hauteur à laquelle tu souhaites placer ta caméra par rapport à l'entity que tu suis.
Remarque : Pour placer ta caméra derrière l'entity
Angle = Angle de l'entity + 180°
Pour placer la caméra de côté
Angle = Angle de l'entity + 90°
Et pour finir , tu peux utiliser la fonction
CameraLookAt(#Camera , EntityX(Joueur), EntityY(Joueur), EntityZ(Joueur))
pour pointer la camera vers ton entity
http://purebasic.hmt-forum.com/viewtopic.php?t=1830
Le principe est simple , tu as besoin de connaitre l'angle de ton objet.
Comme pour l'instant les commandes de PureBasic ne permettent pas de connaitre cet angle , tu devras le gérer toi même , donc à chaque fois que tu tournes ton entity , mettons de 2° , tu tiens à jour l'angle de l'entity en y ajoutant 2°.
Alors tu as la position de l'entity , PureBasic te donne ces infos avec EntityX() , EntityY() , et EntityZ() .
Il te reste à faire un peu de trigo .
En calculant la position de ta caméra
PosXCamera.f = EntityX() + Cos( Angle * 0.0174533 ) * DistanceCamera
PosZCamera.f = EntityZ() - Sin( Angle * 0.0174533 ) * DistanceCamera
Et pour la hauteur de la camera
PosYCamera.f = EntityY() + HauteurCamera
Avec DistanceCamera = la distance à laquelle tu souhaites placer ta caméra
et HauteurCamera la hauteur à laquelle tu souhaites placer ta caméra par rapport à l'entity que tu suis.
Remarque : Pour placer ta caméra derrière l'entity
Angle = Angle de l'entity + 180°
Pour placer la caméra de côté
Angle = Angle de l'entity + 90°
Et pour finir , tu peux utiliser la fonction
CameraLookAt(#Camera , EntityX(Joueur), EntityY(Joueur), EntityZ(Joueur))
pour pointer la camera vers ton entity
Code : Tout sélectionner
CameraLocate(#Camera , PosXCamera , PosYCamera , PosZCamera)
merci
il reste un dernier probleme mais avant voici mon code
la le ou plus tot les probleme sont que mon image clignote sans aret le perso tourne dans tout les sens et je comprend pas
il reste un dernier probleme mais avant voici mon code
Code : Tout sélectionner
#RobotMesh = 0
#RobotTexture = 0
#Robot = 0
#CameraSpeed = 5
IncludeFile "Screen3DRequester.pb"
DefType.f KeyX, KeyY, MouseX, MouseY
If InitEngine3D()
Add3DArchive("data/" , #PB_3DArchive_FileSystem)
Add3DArchive("data/Skybox.zip", #PB_3DArchive_Zip)
InitSprite()
InitKeyboard()
InitMouse()
If Screen3DRequester()
PosXCamera.f = EntityX(0) + Cos( Angle * 0.0174533) * 20
PosZCamera.f = EntityZ(0) - Sin( Angle * 0.0174533) * 20
PosYCamera.f = EntityY(0) + 15
Angle = angleentity + 180
CameraLookAt(0 , EntityX(0), EntityY(0), EntityZ(0))
AmbientColor(RGB(255,255,255))
CreateMaterial (0, LoadTexture(0, "Terrain_Texture.jpg"))
AddMaterialLayer(0, LoadTexture(1, "Terrain_Detail.jpg"), 1)
CreateTerrain ("Terrain.png", MaterialID(0), 20,2,20, 20)
CreateCamera(0, 0, 0, 100, 100)
CameraLocate(0, 128, 25, 128)
LoadMesh (#RobotMesh , "Robot.mesh")
CreateEntity(#Robot, MeshID(#RobotMesh), MaterialID(0))
EntityMaterial(#Robot, MaterialID(0))
AnimateEntity(#Robot, "Walk")
DisableMaterialLighting(0, 1)
MaterialAmbientColor(0, RGB(100, 100, 100))
MaterialSpecularColor(0, RGB(255, 255, 255))
CreateLight(0, RGB(0,0,255), 100.0, 0, 0)
LightSpecularColor(0, RGB(255, 0, 0))
SkyDome("Clouds.jpg",10)
ScaleEntity(#robot,1,1,1)
Repeat
Screen3DEvents()
Height.f = TerrainHeight (EntityX(0), EntityY(0))
MoveEntity (0, 0, -EntityY(0)+Height+7, 0)
PosXCamera.f = EntityX(0) + Cos( Angle * 0.0174533 ) * 50
PosZCamera.f = EntityZ(0) - Sin( Angle * 0.0174533 ) * 50
PosYCamera.f = EntityY(0) + height + 15
CameraLocate(0, PosXCamera , PosYCamera , PosZCamera)
Angle = Angle2 + 180
; CameraLookAt(0, EntityX(0), EntityY(0), EntityZ(0))
If ExamineKeyboard()
If KeyboardPushed(#PB_Key_Left)
KeyX = 5
angle2= angle2-5
ElseIf KeyboardPushed(#PB_Key_Right)
KeyX = -5
angle2= angle2+5
Else
KeyX = 0
EndIf
If KeyboardPushed(#PB_Key_Up)
KeyY = -#CameraSpeed
ElseIf KeyboardPushed(#PB_Key_Down)
KeyY = #CameraSpeed
Else
KeyY = 0
EndIf
RotateEntity(0,keyX,0,0)
MoveEntity (0, 0, - EntityY(0)+Height+7,0)
EndIf
If ExamineMouse()
If MouseButton(2)=1
MouseX = -(MouseDeltaX()/10)*#CameraSpeed/2
MouseY = -(MouseDeltaY()/10)*#CameraSpeed/2
RotateCamera(0,mouseX,MouseY,0)
EndIf
EndIf
RenderWorld()
Screen3DStats()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
EndIf
Else
MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf
End
Compare ce code avec le tien.
S'il y a des trucs que tu ne comprends pas , n"hésite pas à demander
J'ai ajouté la souris pour contrôler un peu plus la caméra.
Si tu appuis sur le bouton gauche , tu peux changer l'angle de la caméra en bougeant la souris en X, et tu peux aussi la lever ou la baisser en bougeant en Y.
S'il y a des trucs que tu ne comprends pas , n"hésite pas à demander

J'ai ajouté la souris pour contrôler un peu plus la caméra.
Si tu appuis sur le bouton gauche , tu peux changer l'angle de la caméra en bougeant la souris en X, et tu peux aussi la lever ou la baisser en bougeant en Y.
Code : Tout sélectionner
#RobotMesh = 0
#RobotTexture = 0
#Robot = 0
#CameraSpeed = 1
IncludeFile "Screen3DRequester.pb"
DefType.f KeyX, KeyY, MouseX, MouseY
If InitEngine3D()
Add3DArchive("data/" , #PB_3DArchive_FileSystem)
Add3DArchive("data/Skybox.zip", #PB_3DArchive_Zip)
InitSprite()
InitKeyboard()
InitMouse()
If Screen3DRequester()
Angle = angleentity + 180
AmbientColor(RGB(255,255,255))
CreateMaterial (0, LoadTexture(0, "Terrain_Texture.jpg"))
AddMaterialLayer(0, LoadTexture(1, "Terrain_Detail.jpg"), 1)
CreateTerrain("Terrain.png", MaterialID(0), 4, 0.6, 4, 4)
CreateCamera(0, 0, 0, 100, 100)
CameraLocate(0, 128, 25, 128)
LoadMesh (#RobotMesh , "Robot.mesh")
CreateMaterial(1, LoadTexture(1, "r2skin.jpg"))
CreateEntity(#Robot, MeshID(#RobotMesh), MaterialID(1))
AnimateEntity(#Robot, "Walk")
DisableMaterialLighting(0, 1)
MaterialAmbientColor(0, RGB(100, 100, 100))
MaterialSpecularColor(0, RGB(255, 255, 255))
CreateLight(0, RGB(0,0,255), 100.0, 0, 0)
LightSpecularColor(0, RGB(255, 0, 0))
SkyDome("Clouds.jpg",10)
ScaleEntity(#Robot,0.3,0.3,0.3)
DEcaleCam = 180
Repeat
Screen3DEvents()
If ExamineKeyboard()
If KeyboardPushed(#PB_Key_Left)
KeyX = 3
Angle2= Angle2+3
ElseIf KeyboardPushed(#PB_Key_Right)
KeyX = -3
Angle2= Angle2-3
Else
KeyX = 0
EndIf
If KeyboardPushed(#PB_Key_Up)
KeyY = #CameraSpeed
ElseIf KeyboardPushed(#PB_Key_Down)
KeyY = -#CameraSpeed
Else
KeyY = 0
EndIf
If ExamineMouse()
If MouseButton(1)
MouseX = -(MouseDeltaX()/10)*#CameraSpeed/2
MouseY = -(MouseDeltaY()/10)*#CameraSpeed/2
EndIf
EndIf
;Tourne le robot
RotateEntity(0,KeyX,0,0)
;Déplace le robot
MoveEntity (0, Cos( Angle2 * 0.0174533 ) * KeyY, 0,- Sin( Angle2 * 0.0174533 ) * KeyY)
;Hauteur du robot sur le terrain
Height.f = TerrainHeight (EntityX(0), EntityZ(0))
;Replace le Robot à la bonne hauteur sur le terrain
EntityLocate(#Robot,EntityX(#Robot),Height,EntityZ(#Robot))
;Gestion de la caméra après le déplacement du robot
;Angle de la caméra > On place la caméra derrière le robot
DEcaleCam - MouseX
Angle = Angle2 + DEcaleCam
PosXCamera.f = EntityX(0) + Cos( Angle * 0.0174533 ) * 50
PosZCamera.f = EntityZ(0) - Sin( Angle * 0.0174533 ) * 50
PosYCamera.f = EntityY(0) + 15
;Contrôle la hauteur de la caméra ,pour qu'elle survole le terrain en suivant le robot
HauteurCamera.f = TerrainHeight (PosXCamera, PosZCamera)
If HauteurCamera + 15 > PosYCamera
PosYCamera = HauteurCamera + 15
EndIf
CameraLocate(0, PosXCamera , PosYCamera , PosZCamera)
DecaleLookY + MouseY
CameraLookAt(0, EntityX(0), EntityY(0) + DecaleLookY, EntityZ(0))
EndIf
RenderWorld()
Screen3DStats()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
EndIf
Else
MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf
End