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

Algorithmes et structures de données Discussion :

Point = Gravité, ou point a fuir!


Sujet :

Algorithmes et structures de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2008
    Messages : 429
    Points : 60
    Points
    60
    Par défaut Point = Gravité, ou point a fuir!
    Allo,
    je ne sais pas si je postes au bon endroit :
    Je veux faire un jeu de course sur des cylindre. Je concevoir une manière de créer simplement une gravité en tout sens.

    On peut facilement créer un point (un vertex) qu'un véhicule ou un héros doit rejoindre. Moi, j'aimerais créer un point que le véhicule doit fuir, et tente de fuir. Ce serait un point gravité.

    Ainsi, je fixerai ce point au-dessus de la tête de mon véhicule, qui aura alors, quoiqu'il fasse, toujours la gravité au-dessus de sa tête, ce qui obligera le véhicule a vouloir tomber invariablement sur le ventre!
    Chaque véhicule aurait son propre point-gravité!
    Ainsi, les véhicules n'auraient d'autres choix que de tourner autour d'un cylindre, sans tomber jamais!

    C'est l'idée de base... J'utilise Unity. En JS ou en C, ça me va. Quelqu'un aurait une idée comment coder ça, pourrait m'aider?
    merci!

  2. #2
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut
    Bonjour,
    pour moi, la gravité est plus un champ vectoriel qu'un point ... je suis un peu perdu dans ton explication. Tu cherches à modéliser une gravité centrée autour d'un point, point situé au dessus d'un mobile. Ok, jusque là pourquoi pas ... mais alors ledit mobile va être attiré par ce point.

    Pourrais-tu définir plus clairement ce que tu cherches à obtenir. Ha et aussi j'ai pas bien compris cette histoire de cylindre.

    Cdlt,
    -- Yankel Scialom

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2008
    Messages : 429
    Points : 60
    Points
    60
    Par défaut
    En vérité, je voudrais que le point nous 'pousse' et non nous attire.
    Pour les histoires de cylindres, voilà. Ça devrait t'éclairer

    et


    Pour les directions aussi. Vu qu'on se dirige en tous sens sur les cylindres, on ne peut plus se fier sur les axes Y et X. Faudrait des points a gauche et a droite de la libelle et dire : si flèche droite, point gauche nous 'pousse'... Même chose pour l'accélération, un point derrière. Bon trop de physique, ce sera p-ê instable.
    Mais je vois pas autre chose! On a tenter plein de trucs avec les années!

  4. #4
    Membre chevronné
    Avatar de lagwag
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2009
    Messages
    693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 693
    Points : 1 891
    Points
    1 891
    Par défaut
    tu n'as qu'à tourner au tour du cylindre en utilisant la trigonometrie où le rayon representerait la "gravité" (la distance entre le sol et le joueur)... l'angle serait la position autour du cylindre (0 à 360)...

    et utiliser les matrices pour prende en compte la direction de ton cylindre dans l'espace

  5. #5
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut
    Si tu utilises un moteur physique, tu peux définir un centre de gravité au centre du tronc à la même « hauteur » que ta libellule.
    Sinon, il te suffit d'appliquer une accélération à ta libellule à chaque instant qui soit dirigée vers le centre du tronc et qui aurait soit une valeur fixe soit une valeur dépendant de l'altitude de celle-ci (par rapport à l'écorce).

    Tu as quoi en place d'un point de vue physique pour l'instant ?
    -- Yankel Scialom

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2008
    Messages : 429
    Points : 60
    Points
    60
    Par défaut
    Pour l'instant rien! J'ai des points a chaque angle du tronc, et je m'en suis servis comme de rail pour programmer un chemin. On a pas de moteur. On a essayer différent truc pour simuler une gravité. Moi et d'autres, car j'ai eu des gens qui ont tenté de m'aider! Mais on n'y est pas arriver!

    Mais, on travaille dans Unity!

    Comment mettre une gravité dans le tronc? tu parles "a la même hauteur" que la libellule? Moi je pensais a un centre de gravité "dans le tronc", au niveau de mes rails? Ce que je n,aime pas avec ça, c'est que ce n'est pas une ligne, mais des points. Si on arrive a quelque chose avec ça, ça demeure long et fastidieux a modéliser! Faut centre les points le plus possible dans le tronc!

    Tu pourrais développer l'idée que tu me proposes? Ça semble intéressant, mais je comprends pas vraiment! Je regarde aussi pour la Trigonométrie. merci a vous 2.

  7. #7
    Membre chevronné
    Avatar de lagwag
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2009
    Messages
    693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 693
    Points : 1 891
    Points
    1 891
    Par défaut
    pour la trigo, je suis en train de faire un jeu comme ca... ca peut te donner une idee du resultat si tu regardes la video...

    http://alloutrace.seccia.com

    petite difference: c'est inversé, on se trouve à l'interieur du cylindre mais le principe est le meme. et l'orientation du cylindre ne change pas contrairement à toi...

    evidemment ce systeme pose probleme si tu comptes rajouter plein d'effets de physique... l'avantage est de pouvoir concretiser un projet rapidement si tu n'as aucun moteur

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2008
    Messages : 429
    Points : 60
    Points
    60
    Par défaut
    Super votre truc, vraiment!
    On voulais aussi des tunnels :


    Et oui, votre tunnel est droit, ça change beaucoup de chose en effet.

    Quoiqu'il en soit... pas pour dire que mon idée est bonne, mais si vous vouliez créer un élément qui en repousse un autre, vous feriez comment?

    Ici un bon code pour créer des points qui 'attire'.


    Pour créer l'inverse, est-il possible de s'inspirer de ça?

    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
    var pathPoint : Transform[]; private var speed = 5;
    private var currentPathPoint : int;
     
     
    function Awake(){ pathPoint[0] = transform;}
     
    function Update(){
     
    if(currentPathPoint < pathPoint.length){
     
    var zone : Vector3 = pathPoint[currentPathPoint].position;
    var movingTo : Vector3 = zone - transform.position;
    var velocity = rigidbody.velocity;
     
    if(movingTo.magnitude < 1){currentPathPoint++;}
    else { velocity = movingTo.normalized * speed;}
    }
     
    else {
    if(1){currentPathPoint = 0;}
    else {velocity = Vector3.zero;}
    }
    rigidbody.velocity = velocity;
    transform.LookAt(zone);
    }

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2008
    Messages : 429
    Points : 60
    Points
    60
    Par défaut
    Citation Envoyé par lagwag Voir le message
    pour la trigo, je suis en train de faire un jeu comme ca... ca peut te donner une idee du resultat si tu regardes la video...

    http://alloutrace.seccia.com

    petite difference: c'est inversé, on se trouve à l'interieur du cylindre mais le principe est le meme. et l'orientation du cylindre ne change pas contrairement à toi...

    evidemment ce systeme pose probleme si tu comptes rajouter plein d'effets de physique... l'avantage est de pouvoir concretiser un projet rapidement si tu n'as aucun moteur
    Quoique un tronc droit m'irait bien! Avec des bosses et des branches, ça peut être intéressant!

    Bon n'empêche que je suis loin de savoir comment tu t'es prit! Faudrait que je me documente. Si je te donnais mes modèles de libellules animés, mes branches 3d, mes textures... ça te dirait de le faire? (un gars s'essaye^^).

  10. #10
    Membre chevronné
    Avatar de lagwag
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2009
    Messages
    693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 693
    Points : 1 891
    Points
    1 891
    Par défaut
    je programme avec DirectX et j'ai jamais utilisé Unity. de plus j'ai encore un sacré boulot pour finir mon jeu... et si je devais réaliser ton jeu, j'opterais pour la vue subjective qui simplifie le code... et je garderais le modele pour les concurrents si yen a.... si c'est un jeu de course, il faut des adversaires.

    generalement j'essaye de trouver des astuces moi meme (quand j'y arrive), donc je sais pas si tu vas trouver bcp de doc la dessus. comme je suis programmeur et game designer, je connais mes limites et je peux inventer un gameplay réalisable.

    si tu souhaites faire un tronc droit alors ca reste assez simple. quelques explications:

    Precisions: Y est l'axe pour la hauteur et Z pour la profondeur. Et le tronc va vers Z+.

    Le plus simple à faire c'est la vitesse. Il suffit de modifier la position Z avec une vitesse et une acceleration (si le joueur controle lui meme la vitesse). L'acceleration modifie la vitesse et la vitesse modifie la position Z. Tu peux avoir une acceleration forte pour avancer (UP), une deceleration forte pour freiner (DOWN) et une deceleration faible si aucune touche n'est enfoncée par exemple. Je te conseille d'utiliser la seconde comme unité de temps.


    Pour la partie rotation tu dois utiliser cette formule:
    x = sin(angle) * radius;
    y = cos(angle) * radius;

    l'angle est compris entre 0 et 360 ou 0 et 2PI pour les radians.
    le radius est compris entre un min et max à définir. Le min est le rayon du tronc (+ marge) et le max est l'eloignement max par rapport au tronc

    Ici aussi, il faut utiliser une vitesse et une acceleration.
    Normalement la vitesse de rotation devrait varier en fonction du rayon car un tour complet devrait etre plus long en etant eloigné du tronc... mais c'est un detail que tu pourras regler facilement plus tard.

    Dans mon jeu c'est les sauts qui modifient le rayon, dans le tien, je pense que c'est le joueur qui controle ca?... donc il faut implementer une vitesse et une acceleration comme d'hab pour modifier le radius entre min et max.

    voila c'est le principe en gros... bien sur, tu peux commencer sans te preoccuper des vitesses et accelerations. En changeant les valeurs Z, angle et radius. Donc si tu as pigé le truc, il ne faut pas modifier directement X et Y.

    un petit conseil: je pense que tu peux te contenter d'un point pour representer ta libellules si tu choisis la vue subjective, notamment pour gerer les collisions. C'est ce point qu'il faudra modifier. Tu n'auras qu'à placer la camera en fonction de ce point.

Discussions similaires

  1. ensemble de points entre deux points connus
    Par Minouchka dans le forum Traitement d'images
    Réponses: 4
    Dernier message: 20/03/2010, 15h57
  2. Réponses: 4
    Dernier message: 25/02/2010, 15h22
  3. Réponses: 1
    Dernier message: 12/12/2006, 23h34
  4. [ plugin ][ extension point ] liste des points d'extension
    Par Satch dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 19/03/2004, 09h34

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