Page 1 sur 2

faire de l'eau

Publié : lun. 08/août/2005 19:08
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

Publié : lun. 08/août/2005 19:13
par KarLKoX

Publié : lun. 08/août/2005 19:25
par scaraber
il me faut uen version dun log que jai pas et en plus pas de code pb

Publié : lun. 08/août/2005 19:27
par KarLKoX
Euh ... c'est du C++ et ça peut s'utiliser avec DevC++ ... j'ai pas bien compris ta remarque.

Publié : lun. 08/août/2005 19:31
par scaraber
ezn faites je cherche un code pour PB(on est sur le forum de pure basic ) pour faire de l'eau

Publié : lun. 08/août/2005 19:35
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.

Publié : mar. 09/août/2005 8:20
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.

Publié : mar. 09/août/2005 9:54
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
++

Publié : mar. 09/août/2005 10:09
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

Publié : mar. 09/août/2005 10:17
par scaraber
merci bcp je avis essayre tout de suite

Publié : mar. 09/août/2005 10:27
par scaraber
je bne trouve pas coment placer la cam sur l'objet un genr de positioncamera (camera,x,,y,z)
voila
++

Publié : mar. 09/août/2005 12:03
par comtois

Code : Tout sélectionner

CameraLocate(#Camera , PosXCamera , PosYCamera , PosZCamera) 

Publié : mar. 09/août/2005 16:57
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

Publié : mar. 09/août/2005 21:14
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

Publié : mer. 10/août/2005 9:50
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++