IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Physique Discussion :

Moteur physique en Delphi utilisant DirectX


Sujet :

Physique

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Moteur physique en Delphi utilisant DirectX
    bonjour a tous et a toutes

    je suis a epita et avec mon groupe, on a un projet a presente en fin d'annee. on a decide de faire un fps sous delohi/directx. notre premiere soutenance est placee entre le 5 et le 9 janvier. je suis en charge principalement du moteur physique. je sais quelle est sa fonction mais je n'ai aucune idee de par ou je doi commencer. pouvez vous m'aidez?

    je vous remercie d'avance

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 59
    Points : 62
    Points
    62
    Par défaut
    je sais quelle est sa fonction mais je n'ai aucune idee de par ou je doi commencer. pouvez vous m'aidez?
    Commencer par étudier l'existant, comme toujours.

    dstar

  3. #3
    Expert éminent
    Avatar de raptor70
    Inscrit en
    Septembre 2005
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2005
    Messages : 3 173
    Points : 6 812
    Points
    6 812
    Mes Tutos DirectX, OpenGL, 3D : http://raptor.developpez.com/

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut probleme de mouvement/positionnnement
    bonjour a tous

    jai un petit souci. a l'execution du jeu tt va pour le mieu, mon objet et la camera ont le même mouvement. Mais dès que je fais une rotation de la camera,l'objet ne se deplace plus en fonction de la camera. dc je voudrai savoir comment je dois m'y prendre pour récupérer le nouvel angle de la camera a chaque déplacement et positionner mon objet en fonction de cet angle pour qu'il continue de se deplacer selon la camera. je code en delphi et j'utilise delphi 2009(le dot net pour etre précis).
    P.S : pour le saut je ne gère pas encore la gravité dc si vous pouvez par la meme occasion m'indiquer le chemin a suivre. idem pour les collisions ou je n'ai pour l'instant limiter les déplacements aux dimensions de la map.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    unit Camera;
     
    interface
     
    uses
      Microsoft.DirectX,
      Microsoft.DirectX.Direct3D,
      Microsoft.DirectX.Direct3DX;
     
    type
      KCamera = class(System.&Object)
                  PosMesh, PosCam : Vector3;
                  u,d,l,r,n,j,w,c : boolean;
                  FDevice : Device;
                  matrx : matrix;
                  teste : integer;
                  angle: double;
     
                procedure Initialisation(dev : device);
                procedure resetPosition(x_i,y_i,z_i : Single);
                procedure mouvement(dir : char);
                procedure Update;
     
              Private
                procedure view();
     
                end;
     
    implementation
     
    procedure KCamera.Initialisation(dev : Device);
    begin
      FDevice := dev;
      view;
    end;
     
    procedure KCamera.resetPosition(x_i,y_i,z_i : Single);
    begin
      angle := cos(90) - 1.2 ;
      PosCam.x := 1.0 + cos (angle);
      PosCam.y := 1.0;
      PosCam.z := 1.0 + sin (angle);
      PosMesh.x := PosCam.x;
      PosMesh.y := PosCam.y;
      PosMesh.z := PosCam.z + 1;
    end;
     
    procedure KCamera.mouvement(dir : char);
    begin
      case dir of
        'u' : begin
                if (poscam.z < 23) and (posmesh.z < 23) then
                begin
                  PosMesh.z := PosMesh.z + 0.2;
                  PosCam.z := PosCam.z + 0.2;
                end;
                Update;
              end;
     
        'd' : begin
                if (poscam.z > -23) and (posmesh.z > -23) then
                begin
                  PosMesh.z := PosMesh.z - 0.2;
                  PosCam.z := PosCam.z - 0.2;
                end;
                Update;
              end;
     
        'l' : begin
                if (poscam.x > -23) and (posmesh.x > -23) then
                begin
                  PosMesh.x := PosMesh.x - 0.2;
                  PosCam.x := PosCam.x - 0.2;
                end;
                Update;
              end;
     
        'r' : begin
                if (poscam.x < 23) and (posmesh.x < 23) then
                begin
                  PosMesh.x := PosMesh.x + 0.2;
                  PosCam.x := PosCam.x + 0.2;
                end;
                Update;
              end;
     
        'n' : begin
                if posmesh.y <= 8 then
                begin
                  PosMesh.y := PosMesh.y + 0.5;
                  PosCam.y := PosCam.y + 0.5;
                end;
                Update;
              end;
     
        'j' : begin
                if posmesh.y > 1 then
                begin
                  PosMesh.y := PosMesh.y - 0.32;
                  PosCam.y := PosCam.y - 0.32;
                end;
                Update;
              end;
     
        'w' : begin
                angle := angle + 0.02;
                PosCam.x := Poscam.x + cos(angle);
                PosCam.z := Poscam.z + sin(angle);
                Update;
              end;
     
        'x' : begin
                angle := angle - 0.02;
                PosCam.x := PosMesh.x + cos(angle);
                PosCam.z := PosMesh.z + sin(angle);
                Update;
              end;
      end;
     
    end;
     
    procedure KCamera.Update;
    begin
      Matrx := Matrix.LookAtLH( Vector3.Create( PosMesh.x + cos(angle), PosMesh.y, PosMesh.z + sin(angle)), Vector3.Create( PosMesh.x, PosMesh.y, PosMesh.z ), Vector3.Create( 0, 1, 0 ) ); // Ne pas toucher sinon plus de boule  FUCK CA TOURNE DONC ON TOUCHE ENCORE MOIN
      FDevice.Transform.View := Matrx;
      inc(teste);
    end;
     
    procedure KCamera.view;
    begin
      matrx := Matrix.Identity * Matrix.RotationY(angle) * Matrix.Translation(PosCam.x ,PosCam.y ,PosCam.z);
      FDevice.Transform.View := Matrx;
    end;
     
    end.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    voici le code qui gère les mouvements:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    unit Key;
     
    interface
    uses
      System.Windows.Forms,
      Microsoft.DirectX,
      Microsoft.DirectX.Direct3D,
      Microsoft.DirectX.Direct3DX,
      Camera;
     
    type
      TKeyEventArgs  = System.Windows.Forms.KeyEventArgs;
      TKeys              = System.Windows.Forms.Keys;
      Kkey = class
             KUp,KDown,KLeft,KRight,Kescape,Kspace,Kz,Ks,Kd,Kq,Kw,Kx : Boolean;
             FCamera : KCamera;
             FDevice : Device;
             procedure initialisation(dev : device; Camera : KCamera);
             procedure KeyDown(e : TKeyEventArgs );
             procedure KeyUp(e : TKeyEventArgs );
             procedure KeyEvents();
             end;
     
    implementation
     
    procedure KKey.initialisation(dev : device; Camera : KCamera);
    begin
      FDevice := dev;
      FCamera := Camera;
    end;
     
    procedure Kkey.KeyDown(e : TKeyEventArgs );
    begin
      Case e.KeyCode of
        TKeys.Up : KUp := True;
        TKeys.Down : KDown := True;
        TKeys.Left : KLeft := True;
        TKeys.Right : KRight := True;
        Tkeys.Escape : KEscape := True;
        Tkeys.Space : KSpace := True;
        Tkeys.Z : KZ := True;
        Tkeys.S : KS := True;
        Tkeys.D : KD := True;
        Tkeys.Q : KQ := True;
        Tkeys.W : KW := True;
        Tkeys.X : KX := True;
      end;
    end;
     
    procedure Kkey.KeyUp(e : TKeyEventArgs );
    begin
      Case e.KeyCode of
      TKeys.Up : Kup := false;
      TKeys.Down : Kdown := false;
      TKeys.Left : KLeft := false;
      TKeys.Right : KRight := false;
      Tkeys.Escape : KEscape := false;
      Tkeys.Space : KSpace := false;
      Tkeys.Z : KZ := false;
      Tkeys.S : KS := false;
      Tkeys.D : KD := false;
      Tkeys.Q : KQ := false;
      Tkeys.W : KW := false;
      Tkeys.X : KX := false;
      end;
    end;
     
    procedure KKey.KeyEvents;
    begin
      if Kup or KZ then
        FCamera.mouvement('u');
      if Kdown or KS then
        FCamera.mouvement('d');
      if KLeft or KQ then
        FCamera.mouvement('l');
      if KRight or KD then
        FCamera.mouvement('r');
      if KSpace then
        FCamera.mouvement('n')
      else
        FCamera.mouvement('j');
      if KW then
        FCamera.mouvement('w');
      if KX then
        FCamera.mouvement('x');
    end;
     
    end.

Discussions similaires

  1. Moteur Physique Delphi
    Par epita2012 dans le forum Développement 2D, 3D et Jeux
    Réponses: 1
    Dernier message: 01/05/2008, 12h40
  2. Moteur Physique open GL sous Delphi (collisions et saut)
    Par overlolo dans le forum Physique
    Réponses: 3
    Dernier message: 26/03/2008, 00h36
  3. Moteur Physique DELPHI
    Par epita2012 dans le forum Projets
    Réponses: 13
    Dernier message: 17/01/2008, 12h01
  4. Utiliser DirectX 9 avec C++Builder
    Par Olivier Constans dans le forum DirectX
    Réponses: 2
    Dernier message: 27/06/2005, 11h30
  5. Installation d'une appli en delphi, utilisant Oracle
    Par nilna972 dans le forum Bases de données
    Réponses: 3
    Dernier message: 10/11/2003, 13h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo