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

OpenGL Discussion :

Pb de collision


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 107
    Par défaut Pb de collision
    Bonjour, je suis en train de programmer un petit moteur 3d.

    Pour le moment, il permet de charger une map bsp, et de naviguer dedans.
    J'ai rajouter une fonction permettant de detecter la collision d'une sphere contre un plan. Cela fonctionne plutot bien : lorque la sphere(=camera) se cogne contre un mur, elle s'arete.

    Cependant je n'arrive pas a faire en sorte que la camera longe le mur, comme dans les jeux de fps.

    Apres plusieur essai, j'ai reussi a obtenir a peu pres se que je souhaiter, mais il y a un effet de "retour-avant-retour-avant" de la camera : en effet dans mon programme, j'avance la camera contre le mur, je detecte qu'il y a une collision, donc je la fai reculer..et ainsi de suite.

    Si quelqun a une idée pour supprimer cette effet, je lui en serai tres reconnaissant.

    ++
    Myke

  2. #2
    Membre expérimenté Avatar de Steki-kun
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 222
    Par défaut
    quand tu vas bouger ta caméra, tu calcules les nouvelles positions, et là tu fais ta détection de collision, si ta sphère traverse le mur, alors tu ne prends pas en compte la modification de la position, sinon oui et ensuite seulement tu affiches. Ainsi ca marchera.
    Juste une chose, tu testes en regardant si ta sphère est à une distance inférieure à son rayon du mur ou bien tu utilises l'arbre bsp ??

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 107
    Par défaut
    Merci pour ta reponse.
    Non je n'utilise pas l'arbre bsp pour gerer les collisions car je ne sai pas comment faire.
    En fait le probleme c'est que je test les collision en meme temps que j'affiche les triangles de la map : toutes les coordonnées de mes triangle sont dans un tableau, et au fur est a mesure que je les affiche, je test pour savoir si ma sphere est dans le mur, ou deriere le mur.
    C'est pourquoi je ne voi pas trop comment appliqué ta solution.

    Merci
    Myke

  4. #4
    Membre expérimenté Avatar de Steki-kun
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 222
    Par défaut
    il faut absolument utiliser l'arbre BSP pour les collisions, ca résoudra ton problème et en plus c'est plus rapide.
    D'abord est ce que tu sais comment est construit l'arbre BSP et quel est son principe de fonctionnement ? Sinon les explications que je peux faire pour l'utiliser pour la collision ne seront pas très utiles. Tu peux chercher sur google, tu devrais trouver plein de truc, et d'autre part j'ai implémenté un BSP pour algo du peintre + collision l'année dernière, j'ai encore le rapport, si jamais ça peut t'aider. Mais tout n'est pas détaillé, il s'adresse à des profs qui savent déjà comment ça marche. Dis moi si ca t'intéresse.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 107
    Par défaut
    Merci beaucoup pour ton aide : j'ai fait quelque recherche sur internet, a savoir comment gerer les collision avec les arbres bsp, et j'ai trouver quelque tutorial sympa. Je vai essayer avec sa, je te tien au courant.
    Merci encore
    Myke

  6. #6
    Membre éclairé
    Profil pro
    Ingénieur développement
    Inscrit en
    Juillet 2004
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement

    Informations forums :
    Inscription : Juillet 2004
    Messages : 323
    Par défaut
    J'ai eu le mê^me problème que toi il y a quelques années.

    J'ai cherché et je dois dire que autant, on trouve des techniques pour détecter les collisions, autant, il est moins facile de trouver des techniques de réponses à ces collisions.

    J'ai donc implémenté ma propre méthode, qui a parfaitement fonctionnée.

    Au lieu de lancer un seul rayon, j'en ai lancé 8 tout autour de la sphère.
    Ces rayons sont en fait des segments, d'une longueur de la taille de ta sphère + le déplacement. Seul le rayon opposé au éplacement est plus court, c'est à dire qu'il possède seulement pour longueur la taille de sphère, mais sans le déplacement. Ainsi, si tu fais la somme vectorielle des 8 rayons, la résultante est bien ton déplacement.

    Maintenant que tu as constitué tes 8 rayons, sur chacun d'eux, tu appliques ton test de collision, mais tu récupères aussi une donnée très importante : la distance entre ta position acuelle et le point de collision s'il y en a un.
    Grâce à cette distance, tu peux redonner une nouvelle norme à ton rayon.
    Tu fais ensuite une somme vectorielle de tous tes rayons, et miracle : la résultante va te donner ton déplacement! En tenant compte des collisions et du glissement!

    Je ne sais pas si tu as tout compris, mais le principe est assez simple en fait.
    Pour une sphère, tu peux utiliser encore plus de rayons si tu souhaites être plus précis.
    Pour ma part, j'avais juste utilisé un "cylindre", c'est à dire que les rayons partaient tous dans le même plan, un plan horizontal.

    N'hésite pas à demander plus d'infos si tu n'as pas tout compris.

  7. #7
    Membre éprouvé Avatar de amaury pouly
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 157
    Par défaut re
    bonjour, pour gérer le glissement, je trouve qu'il y a plus simple: s'il y a collision avec un mur(plan) alors le vecteur de déplacement est parallèle au plan et dans le même sens que le vecteur de déplacement ! après il suffit de prendre en compte l'angle pour connaître sa norme .

  8. #8
    Membre éclairé
    Profil pro
    Ingénieur développement
    Inscrit en
    Juillet 2004
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement

    Informations forums :
    Inscription : Juillet 2004
    Messages : 323
    Par défaut
    Je ne suis pas d'accord avec toi. En théorie, c'est vrai, mais imagine que tu aies plusieurs faces en forme de cercle, il faut alors faire un algo récursif qui détourne le vecteur un peu plus à chaque fois.

    Essaye de l'implémenter et tu verras que ton système provoque de nombreux bugs et qu'on se retrouve souvent hors du décors.

    J'y avais aussi pensé bien sur, mais en voyant le résultat, j'ai vite abandonné.
    En fait, cela marche que si tu n'as que de très grandes facettes, mais dès que les facettes sont plus petites et plus complexes, ça ne fonctionne pas. Et si tu implémente un algo récursif, c'est ultra lent.

Discussions similaires

  1. algorithme de collision 3D
    Par chetropinchuste dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 14/02/2010, 13h16
  2. [java3D][collision]
    Par geofun dans le forum 3D
    Réponses: 7
    Dernier message: 12/02/2007, 14h49
  3. Test de collision en 2D
    Par GLDavid dans le forum OpenGL
    Réponses: 5
    Dernier message: 12/02/2004, 10h12
  4. Gestion des collisions - terrains
    Par Dranor dans le forum DirectX
    Réponses: 1
    Dernier message: 26/06/2003, 18h50
  5. test collisions
    Par tatakinawa dans le forum OpenGL
    Réponses: 5
    Dernier message: 08/06/2002, 06h03

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