Page 11 sur 14

Publié : mar. 21/mars/2006 19:46
par comtois
Jusqu'à present j'ai travaillé les collisions sur des objets statiques , je vais compliquer un peu en tentant de les gérer avec des objets dynamiques , par exemple un ascenseur , un escalier roulant , ou une plateforme mobile.

Je vais aussi bosser sur les projections 3D>2D et 2D>3D. Je ne sais pas si j'irai loin avec ça , mais je vais essayer :)

après je voudrais mettre quelques objets à éclater dans le temple.
Alors soit je commence à réfléchir à l'IA d'un robot qui peut tirer , poursuivre un adversaire , et que sais-je ...
ou alors je me contente dans un premier temps de mettre des objets statiques que je pourrai éclater à volonté , et j'apprends à gérer des effets avec les particules .
A moins que j'attende que Pure sache gérer les scripts pour les particules et je pourrai utiliser l'éditeur de particules d'Ogre , il y a des scripts qui sont vraiment excellents que j'aimerais bien utiliser.

Bref il y a de quoi faire , je vais toucher un peu à tout ça en vrac selon l'inspiration du moment et du temps disponible.

Publié : mar. 21/mars/2006 21:30
par Progi1984
Que du lourd au final ! Bon travail !

Coté projection, essaie de voir du coté de thalès, tu devrais trouver ce que tu cherches !

Moi, perso, j'attends les exemples de Fred, avec Ogre 1.0.6, car je voir comment il gère les collisions avec ode, car ca va me lancer sur la 3D !

PS : je suis avec attention ce que tu fais !

Publié : mar. 21/mars/2006 21:58
par Polo
Les projections, je crois que j'ai une routine qui fait ça pour mon moteur, ça fait longtemps, je me gourre peut être, mais je suis presque sûr quand même :D
Si ça correspond aux CameraProject et CameraPick de blitz, alors oui, je l'ai fait :)
Je sais pas si ça marche encore :)

Publié : mar. 21/mars/2006 23:00
par Progi1984
Oui, c'est ca Polo !

Publié : mar. 21/mars/2006 23:17
par comtois
Polo a écrit :Les projections, je crois que j'ai une routine qui fait ça pour mon moteur, ça fait longtemps, je me gourre peut être, mais je suis presque sûr quand même :D
Si ça correspond aux CameraProject et CameraPick de blitz, alors oui, je l'ai fait :)
Je sais pas si ça marche encore :)
hé hé, ben j'espère bien que tu as une fonction comme ça dans ton moteur , ça me semble indispensable pour afficher le monde 3D sur un écran non ?
à moins que tu ne fasses un affichage holographique en 3 dimensions ? :P

Publié : mer. 22/mars/2006 9:09
par Progi1984
Bah quoi, tu n'as pas de projecteur holographiques chez toi, comtois ?

lol

Publié : mer. 22/mars/2006 13:23
par Polo
comtois a écrit :hé hé, ben j'espère bien que tu as une fonction comme ça dans ton moteur , ça me semble indispensable pour afficher le monde 3D sur un écran non ?
à moins que tu ne fasses un affichage holographique en 3 dimensions ? :P
Euh, non, ça ne sert pas à ça, mes fonctions, c'est

- pour savoir si, à un point de l'écran (2d), il y a un objet de dessiné (objet 3d, s'il y en a un, la fonction te permet de savoir le quel, sur quel surface, et sur quel triangle :))
- pour savoir à quoi un point du monde (3d), correspond sur l'écran (2d)

Voila, mais ça n'a rien a voir avec l'affichage du monde :)

Publié : mer. 22/mars/2006 20:18
par comtois
Polo a écrit :Euh, non, ça ne sert pas à ça, mes fonctions, c'est

- pour savoir si, à un point de l'écran (2d), il y a un objet de dessiné (objet 3d, s'il y en a un, la fonction te permet de savoir le quel, sur quel surface, et sur quel triangle :))
- pour savoir à quoi un point du monde (3d), correspond sur l'écran (2d)

Voila, mais ça n'a rien a voir avec l'affichage du monde :)
Je me disais aussi ... :P

C'est cool tes fonctions ,c'est exactement ce qu'il nous faut pour PB , tu veux pas nous faire une lib ? :)

Publié : mer. 22/mars/2006 20:55
par Polo
Ben, non, je peux pas faire une lib, mes fonctions ont été écrites pour mon moteur, par exemple pour récupérer les données, et tout ça, bref, ça dépend trop de mon moteur :)
D'ailleurs, je me suis franchement pas foulé pour le nom des fonctions, j'ai décalqué l'architecture de Blitz3d :oops:

Publié : jeu. 23/mars/2006 15:06
par Progi1984
Bon, j'ai modifié le test ode de Fred (chut, faut pas lui dire :)) et j'ai réussi à m'amuser. On peut dirgier les 3 entités (avec les fleches) et la caméra avec ZQSD. Espace fait faire un bond à OgreMesh

Pour ralentir, il faut aller en sens inverse.
Pour choisir l'entité, 1,2,3 du pavé numérique.

http://www.purebasic.com/ogre3dtest.zip pour toutes les datas :)

Code : Tout sélectionner

;
; ------------------------------------------------------------
;
;   PureBasic - Entity
;
;    (c) 2002 - Fantaisie Software
;
; ------------------------------------------------------------
;

IncludeFile "Screen3DRequester.pb"

Define.f KeyX, KeyY,KeyXCam, KeyYCam, MouseX, MouseY
Define.l actif
actif=#CubeEntity
 

#PB_Entity_StaticBody = 1
#PB_Entity_BoxBody    = 2
#PB_Entity_SphereBody = 3

#PB_Shadow_None = 0
#PB_Shadow_Modulative = 1 ; Black shadow (fast)
#PB_Shadow_Additive = 2   ; Additive translucent shadow (more expensive with severl lights)
    
#PB_Entity_Solid      = 0
#PB_Entity_Wireframe  = 1 << 0
#PB_Entity_Plot       = 1 << 1
#PB_Entity_CastShadow = 1 << 2

#PB_3DArchive_Recursive = 2


Enumeration 
  #TrackEntity
  #OgreEntity
  #CubeEntity
  #NinjaEntity
  #SphereEntity
EndEnumeration
 
If InitEngine3D()

  Add3DArchive("Data\Skybox.zip", #PB_3DArchive_Zip)
  Add3DArchive("Data\Dragon.zip", #PB_3DArchive_Zip)
  
  Add3DArchive("Data\Ogre\"   , #PB_3DArchive_FileSystem)
  Add3DArchive("Data\Circuit\", #PB_3DArchive_FileSystem)
  Add3DArchive("Data\Cube\"   , #PB_3DArchive_FileSystem)
  Add3DArchive("Data\Ninja\"  , #PB_3DArchive_FileSystem)
  Add3DArchive("Data\Sphere\" , #PB_3DArchive_FileSystem)
  Add3DArchive("Data\"        , #PB_3DArchive_FileSystem)
  
  Parse3DScripts()
  
  InitSprite()
  InitKeyboard()
  InitMouse()
  
  If Screen3DRequester()
 
    AmbientColor(RGB(128,128,128))
        
    EnableWorldPhysics(1)
    
    WorldShadows(#PB_Shadow_Additive)
    
    EnableWorldCollisions(1)

    
    OgreMesh   = LoadMesh(#PB_Any, "OgreHead.mesh")
    TrackMesh  = LoadMesh(#PB_Any, "racingcircuit.mesh")
    CubeMesh   = LoadMesh(#PB_Any, "Cube.mesh")
    SphereMesh = LoadMesh(#PB_Any, "Sphere.mesh")
    
    Text = LoadTexture(#PB_Any, "r2skin.jpg")
    Mat = CreateMaterial(#PB_Any, TextureID(Text))
    
    Steel = LoadTexture(#PB_Any, "RustySteel.jpg")
    SteelMaterial = CreateMaterial(#PB_Any, TextureID(Steel))
   
    DisableDebugger
    CreateEntity(#OgreEntity  , MeshID(OgreMesh), 0, 10, 40, 0)
    CreateEntity(#TrackEntity , MeshID(TrackMesh), 0, 0, 00, 0)
    CreateEntity(#CubeEntity  , MeshID(CubeMesh), MaterialID(Mat), 20, 40, 0)
    CreateEntity(#SphereEntity, MeshID(SphereMesh), MaterialID(SteelMaterial), 0, 40, 0)
    EnableDebugger

    EntityPhysicBody(#TrackEntity, #PB_Entity_StaticBody)
    EntityRenderMode(#TrackEntity, 0) 
    
    EntityPhysicBody(#OgreEntity, #PB_Entity_BoxBody)
    EntityRenderMode(#OgreEntity, 0) 
    ScaleEntity(#OgreEntity, 0.1, 0.1, 0.1)
    ;- Bug > SetEntityFriction
    ; Réglé pour la beta 8
    ;SetEntityFriction(#OgreEntity,1)
    ;SetEntityMass(#OgreEntity, 1)
    
    EntityPhysicBody(#SphereEntity, #PB_Entity_SphereBody)
    EntityRenderMode(#SphereEntity,0)
    ScaleEntity(#SphereEntity, 0.05, 0.05, 0.05)
    ;SetEntityFriction(#SphereEntity, 10)
    ;SetEntityMass(#SphereEntity, 1)
    

       
    EntityPhysicBody(#CubeEntity, #PB_Entity_BoxBody)
    EntityRenderMode(#CubeEntity,0)
    ScaleEntity(#CubeEntity, 0.1, 0.1, 0.1)
    ;SetEntityFriction(#CubeEntity, 100)
    ;SetEntityMass(#CubeEntity, 1)
        
    CreateLight(0, RGB(255,255,255),  100.0, 100, 0)
    
    SkyBox("desert07.jpg")
   
    CreateCamera(0, 0, 0, 100, 100)
    CameraLocate(0,0,0,30)
     
    Repeat
      Screen3DEvents()
      
      ClearScreen(RGB(0, 0, 0))
            
      If ExamineKeyboard()
        If KeyboardPushed(#PB_Key_Pad1)
          actif=#CubeEntity
        ElseIf KeyboardPushed(#PB_Key_Pad2)
          actif=#SphereEntity
        ElseIf KeyboardPushed(#PB_Key_Pad3)
          actif=#OgreEntity
        EndIf
        
        
        If KeyboardPushed(#PB_Key_Left)
          KeyX = -50
        ElseIf KeyboardPushed(#PB_Key_Right)
          KeyX = 50
        Else
          KeyX = 0
        EndIf
        If KeyboardPushed(#PB_Key_Up)
          KeyY = -50
        ElseIf KeyboardPushed(#PB_Key_Down)
          KeyY = 50
        Else
          KeyY = 0
        EndIf
        
        If KeyboardPushed(#PB_Key_A)
          KeyXCam = -1
        ElseIf KeyboardPushed(#PB_Key_D)
          KeyXCam = 1
        Else
          KeyXCam = 0
        EndIf
        If KeyboardPushed(#PB_Key_W)
         KeyYCam = -1
        ElseIf KeyboardPushed(#PB_Key_S)
          KeyYCam = 1
        Else
          KeyYCam = 0
        EndIf

        If KeyboardPushed(#PB_Key_PageUp)
          RollZ = 3
        Else
          RollZ = 0
        EndIf
             
        If KeyboardPushed(#PB_Key_Space)
          MoveEntity(#OgreEntity, 10, 40, 0)
        EndIf
    
      EndIf
      
      If ExamineMouse()
        MouseX = -MouseDeltaX()/10 
        MouseY = -MouseDeltaY()/10
      EndIf
      ;If KeyXCam<>0: Debug "KeyXCam"+Str(KeyXCam):EndIf
      ;If KeyYCam<>0:Debug "KeyYCam"+Str(KeyYCam):EndIf
      ;If KeyX<>0:Debug "KeyX"+Str(KeyX):EndIf
      ;If KeyY<>0:Debug "KeyY"+Str(KeyY):EndIf
      RotateCamera(0, MouseX, MouseY, RollZ)
      MoveCamera  (0, KeyXCam, 0, KeyYCam)
      MoveEntity(actif,KeyX, 0, KeyY)
      If ExamineWorldCollisions()
        While NextWorldCollision()
          If CheckEntityCollision(#CubeEntity, #SphereEntity)
            Debug "Cube and Sphere collide !"
          ElseIf CheckEntityCollision(#CubeEntity, #OgreEntity)
           Debug "Cube and Ogre collide !"
          ElseIf CheckEntityCollision(#SphereEntity, #OgreEntity)
            Debug "Sphere and Ogre collide !"
          EndIf
        Wend
      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
Je dédis ce code à Comtois, qui s'est fait - disons le franchement - chier à faire une lib pour les collisions.

Qu'en pensez vous Comtois et Polo, nos deux amateurs de la 3D que je rejoins :) ?

Publié : jeu. 23/mars/2006 15:55
par Polo
J'en pense rien sans exécutable :oops:
Je sais que je fais chier avec ça, mais j'ai pas envie de faire une installation spéciale de Purebasic avec Ogre :oops:
Enfin, c'est cool, maintenant on est 3 à faire de la 3d !

Publié : jeu. 23/mars/2006 15:57
par Progi1984
Polo, ca marche avec la beta 7 :) donc pas besoin d'installation spéciale

Publié : jeu. 23/mars/2006 15:58
par Polo
Progi1984 a écrit :Polo, ca marche avec la beta 7 :) donc pas besoin d'installation spéciale
Ouaip, mais pas chez moi, j'ai désinstallé toutes les librairies Ogre de purebasic, j'ai mes raisons :)

Publié : jeu. 23/mars/2006 16:09
par Progi1984
Mais que nous caches tu jeune cachotier :) ? Bientot une surprise ?

Publié : jeu. 23/mars/2006 19:46
par comtois
Je dédis ce code à Comtois, qui s'est fait - disons le franchement - chier à faire une lib pour les collisions.
Merci pour la dédicace :)

Sinon je ne me suis pas fait chier un seul instant, au contraire ça m'a bien plu de bosser ce sujet.
Et c'est loin d'être fini , il y a tellement à apprendre dans ce domaine que ça me promet encore quelques bonnes séances de prise de tête :)

Qu'en pensez vous Comtois et Polo, nos deux amateurs de la 3D que je rejoins ?
C'est vrai qu'on est pas nombreux à faire de la 3D ici :?
Heureusement on est quand même un peu plus que 3 a en faire :)

Pour ce qui concerne ta démo, j'ai testé rapidement, je n'ai pas encore approfondi le truc, mais on dirait que ça fonctionne plutôt bien :P

J'avais mis de côté ODE après avoir essayé en vain de diriger la sphère sur le circuit, si tu arrives vraiment à diriger les entitys sur le terrain alors là chapeau ça m'intéresse.

Je reprendrai ton code un peu plus tard pour faire d'autres tests, merci pour le code :)