faire de l'eau

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
scaraber
Messages : 362
Inscription : ven. 15/juil./2005 17:32

faire de l'eau

Message par scaraber »

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
KarLKoX
Messages : 1191
Inscription : jeu. 26/févr./2004 15:36
Localisation : France
Contact :

Message par KarLKoX »

"Qui baise trop bouffe un poil." P. Desproges
scaraber
Messages : 362
Inscription : ven. 15/juil./2005 17:32

Message par scaraber »

il me faut uen version dun log que jai pas et en plus pas de code pb
KarLKoX
Messages : 1191
Inscription : jeu. 26/févr./2004 15:36
Localisation : France
Contact :

Message par KarLKoX »

Euh ... c'est du C++ et ça peut s'utiliser avec DevC++ ... j'ai pas bien compris ta remarque.
"Qui baise trop bouffe un poil." P. Desproges
scaraber
Messages : 362
Inscription : ven. 15/juil./2005 17:32

Message par scaraber »

ezn faites je cherche un code pour PB(on est sur le forum de pure basic ) pour faire de l'eau
KarLKoX
Messages : 1191
Inscription : jeu. 26/févr./2004 15:36
Localisation : France
Contact :

Message par KarLKoX »

J'ai pas souvenir d'en avoir vu sur ce forum (ni sur le forum anglais).
Peut être que tu auras plus de chance que moi avec le moteur de recherche.
"Qui baise trop bouffe un poil." P. Desproges
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

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.
scaraber
Messages : 362
Inscription : ven. 15/juil./2005 17:32

Message par scaraber »

merci je vais regarder le code ... sinon j'aimerai savoir coment faire une camera qui suis un objet voila tout
merci de votre aide
++
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

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
scaraber
Messages : 362
Inscription : ven. 15/juil./2005 17:32

Message par scaraber »

merci bcp je avis essayre tout de suite
scaraber
Messages : 362
Inscription : ven. 15/juil./2005 17:32

Message par scaraber »

je bne trouve pas coment placer la cam sur l'objet un genr de positioncamera (camera,x,,y,z)
voila
++
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Code : Tout sélectionner

CameraLocate(#Camera , PosXCamera , PosYCamera , PosZCamera) 
scaraber
Messages : 362
Inscription : ven. 15/juil./2005 17:32

Message par scaraber »

merci
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
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
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

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.

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
scaraber
Messages : 362
Inscription : ven. 15/juil./2005 17:32

Message par scaraber »

merci bcp
jai repere mes erreur
et je vai s pouvoir continuer a perfectioner ce code
il y a juste un leger bug qui est que le terain a ces bonne couleur mais a la texture du robot voila tout merci a++
Répondre