| Position d'un point dans l'espace - 3D | |
|
|
Auteur | Message |
---|
Shurigame Habitué
Messages : 83 Localisation : Tours Projet Actuel : Développez le monde parallèle
| Sujet: Position d'un point dans l'espace - 3D Mer 20 Fév 2013 - 17:17 | |
| Bonjour, Nouveau post relatif au 3d ; je travaille essentiellement sur des mondes 3D. J'ai élaboré des système de collision, mangeant peut de RAM, avec des models 3D .gmmod. Système 1Mais voilà je teste un nouveau système, permettant des gérer les collision ( plus precis ) avec des models diverses et varie, et maintenant animées(et ça lag pas ), via ceci : EGF animator. La question est : comment tester mathématiquement si oui ou non mon instance eft_bullet ce trouve entre deux boules jaunes comme si dessous : - Spoiler:
avec les coordonnées des boules ( i change ) J'a aussi les coordonnée de l'instance eft_bulletSi quelqu'un a une idées, merci de m'en faire part. Merci d'avance. Sans que ça soit un truc de 20 lignes, si possible |
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Position d'un point dans l'espace - 3D Mer 20 Fév 2013 - 17:25 | |
| Que veux tu dire par entre?
Sinon pour connaitre la distance entre 2 points dans l'espace: distance: sqrt( sqr(x1 - x2) + sqr(y1 - y2) + sqr(z1 - z2) )
Pour vérifier s'il y a intersection entre deux sphères (ou si l'une est dans l'autre): sqrt(sqr(x1 - x2) + sqr(y1 - y2) + sqr(z1 - z2)) <= r1 + r2 soit, plus optimisé: sqr(x1 - x2) + sqr(y1 - y2) + sqr(z1 - z2) <= sqr(r1 + r2)
Avec ça déjà tu peut faire pas mal de choses. |
|
| |
Shurigame Habitué
Messages : 83 Localisation : Tours Projet Actuel : Développez le monde parallèle
| Sujet: Re: Position d'un point dans l'espace - 3D Mer 20 Fév 2013 - 17:29 | |
| Désolé apparemment je me suis mal exprimé, en fait je voudrait si mon point(instance en réalité) se trouve sur la ligne de la boule A à la boule B . J'espère que tu comprend mieux |
|
| |
Shurigame Habitué
Messages : 83 Localisation : Tours Projet Actuel : Développez le monde parallèle
| Sujet: Re: Position d'un point dans l'espace - 3D Mer 20 Fév 2013 - 17:40 | |
| J'ai commencé par des condition mais, cela me restreignait l’espace en x y et z de cette façon : tout les rond bleu dans la zone dans les pointillés vert répondrait vrai. - Spoiler:
J'espère que ça pourra aider |
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Position d'un point dans l'espace - 3D Mer 20 Fév 2013 - 17:44 | |
| |
|
| |
Shurigame Habitué
Messages : 83 Localisation : Tours Projet Actuel : Développez le monde parallèle
| Sujet: Re: Position d'un point dans l'espace - 3D Mer 20 Fév 2013 - 17:54 | |
| Ta raison là ça commence à faire lourd surtout que j'ai pas que 1os à tester, il va falloir que je trouve une manière rapide de faire exécuter ça. Sinon j’avais pensé a déterminer l'équation de la droite en x,y et x,z et y,z, mais ça aurait été encore plus galère.
Après je te pose une suggestion d'un ami, qui me demande si il serait possible de faire tourner à coté, sans le voir, le monde vue de x,z et y,z.
En fait, il propose de faire le test standard de collision sprite sur 3 système. J'espère que tu as compris l’idée.
Merci déjà de l'aide apportée |
|
| |
-Coco- Utilisateur confirmé: Rang ***
Messages : 545 Localisation : Grenoble - Montpellier Projet Actuel : Orion VII - 0%
| Sujet: Re: Position d'un point dans l'espace - 3D Mer 20 Fév 2013 - 18:00 | |
| Surtout qu'il y a une différence entre appartenir à une droite et se trouver dans une zone, y'en a un où il faut de l'approximation. Mais (je sais pas où tu en es niveau études), tu peux en effet facilement calculer l'équation d'une droite entre 2 points, puis calculer la distance du point à la droite à partir de l'équation (y'a des formules pas si lourdes que ça). En gros tu fais que si cette distance est inférieure à un seuil (diamètre du bras par exemple), eh bien il y a collision... Je te laisse rechercher les formules, j'en ai qui traînent dans un des mes 7 cahiers de maths de l'année mais j'avoue avoir la flemme de chercher... Mais si tu trouves pas au pire je chercherai. (Cherche "distance point droite" pour la formule, et je te laisse te débrouiller pour l'équation). Les calculs sont pas si lourds que ça par rapport à ce que fait un moteur physique classique... _________________ Oh, snap.
Dernière édition par -Coco- le Mer 20 Fév 2013 - 18:03, édité 2 fois |
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Position d'un point dans l'espace - 3D Mer 20 Fév 2013 - 18:02 | |
| Que ce soit en 2d ou en 3d y a quasiment autant de calculs a faire. Ce seras aussi lent, voir même plus.
Ce que j'aurais fait a ta place, c'est un truc du genre:
1) Tu définis une AABB pour ton perso, et une AABB pour la balle qui doit tester la collision. Tu teste avant tout s'il y a collision entre les deux AABB.
S'il y a collision, tu fait les tests dont les calculs sont plus lourd pour vérifier.
L'idéal serais de trouver comment optimiser le test du calcul un peu plus lourd. Tu pourrais par exemple calculer la distance entre ta sphère et ta droite
Edit: La formule de coco c'est un truc du genre d'après mes souvenirs: Pour une droite d'équation ax + by + cz + d = 0 La distance est (a*x + b*y + c*z + d)/sqrt(a*a + b*b + c*c) |
|
| |
Shurigame Habitué
Messages : 83 Localisation : Tours Projet Actuel : Développez le monde parallèle
| Sujet: Re: Position d'un point dans l'espace - 3D Mer 20 Fév 2013 - 18:09 | |
| Oui coco c'est une bonne idée ( pour l'info je suis en 1ere ), mais il y a toujour le même probleme c'est qu'il faut le faire 3 fois par os pour x y z et en plus j'ai 19 os.
Merci pour l'aide quand même |
|
| |
-Coco- Utilisateur confirmé: Rang ***
Messages : 545 Localisation : Grenoble - Montpellier Projet Actuel : Orion VII - 0%
| Sujet: Re: Position d'un point dans l'espace - 3D Mer 20 Fév 2013 - 18:14 | |
| En fait non, ma super formule donne la valeur absolue de la distance dans l'espace (en gros c'est la distance entre le point et le projeté du point sur la droite = le point le plus proche) et non seulement selon les composantes x, y et z. Donc une seule formule Par contre le problème que tu risques d'avoir c'est qu'une droite se prolonge à l'infini, donc si le point est DERRIERE les boules c'est possible que la détection se fasse quand même. Soit tu allourdis la formule pour éviter ça (par exemple en vérifiant la position du projeté et vérifier que ça se situe bien entre les 2 boules), soit comme oni l'a dit, tu fais une AABB autour et tu estimes que si c'est dans la boîte, même si la collision a lieu derrière l'os c'est pas si grave. _________________ Oh, snap.
|
|
| |
Shurigame Habitué
Messages : 83 Localisation : Tours Projet Actuel : Développez le monde parallèle
| Sujet: Re: Position d'un point dans l'espace - 3D Mer 20 Fév 2013 - 18:16 | |
| J'ai testé l'équation pour l'intersection d'une sphère avec une droite dans l'espace - onilink_ a écrit:
- http://www.games-creators.org/wiki/Intersection_dans_l'espace_entre_une_sph%C3%A8re_et_une_droite
Ça reste quand même plutôt lourd comme calcul. Je te conseille vivement de mettre ton perso dans une AABB pour faire des tests préliminaires avant d'utiliser ça x) - Code:
-
// A Ax = squelette.x2[1] Ay = squelette.y1[1] Az = squelette.z1[1] //B Bx = squelette.x2[2] By = squelette.y1[2] Bz = squelette.z1[2] //C Cx = xt Cy = yt Cz = zt //ax²+bx+C a = (Bx - Ax) * (Bx - Ax) + (By - Ay) * (By - Ay) + (Bz - Az) * (Bz - Az); b = 2 * ((Bx - Ax) * (Ax - Cx) + (By - Ay) * (Ay - Cy) + (Bz - Az) * (Az - Cy)); c = Ax * Ax + Ay * Ay + Az * Az + Cx * Cx + Cy * Cy + Cz * Cz - 2 * (Ax * Cx + Ay * Cy + Az * Cz) - Rayon * Rayon; if (b * b - 4 * a * c) >= 0 then {touch=true;show_message('touch')}
Mais ça me répond constament, à peine lancé, "touch". _________________ 01100011011011110110111001101110011001010110001101110100011001010010000001110100011011110110100100100000011100110111 010101110010001000000110110001100001001000000110110101100001011101000111001001101001011100110010000001100101011101000010 000001110100011101010010000001100100011001010110001101101111011101010111011001110010011010010111001001100001001000000111 010101101110001000000110110101101111011011100110010001100101001000000111000001100001011100100110000101101100011011000110 0101011011000110010100100000011001100110000101110011011100110110100101101110011000010110111001110100
|
|
| |
D-z Utilisateur confirmé: Rang *****
Messages : 1611 Localisation : Montpellier
| Sujet: Re: Position d'un point dans l'espace - 3D Mer 20 Fév 2013 - 20:52 | |
| Calculer la distance de la balle aux deux articulations, faire leur somme, et comparer avec la distance entre les articulations ? En-dessous d'un seuil, tu considères que ça touche. _________________ Home is not a place, it's a feeling.
|
|
| |
Shurigame Habitué
Messages : 83 Localisation : Tours Projet Actuel : Développez le monde parallèle
| Sujet: Re: Position d'un point dans l'espace - 3D Mer 20 Fév 2013 - 21:07 | |
| Bonsoir D-z,
En effet ça parait une bonne idée : "peu" de calcul a effectuer, mais le problème c'est qu'il faut le faire 2 fois par os et j'ai 19 os.
Ceci semble quand même une des meilleur option,merci
|
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Position d'un point dans l'espace - 3D Mer 20 Fév 2013 - 21:13 | |
| Si t'utilise des AABB avant tes calculs pour vérifier que la balle est dans la zone du joueur, ça devrais passer tranquille. |
|
| |
Shurigame Habitué
Messages : 83 Localisation : Tours Projet Actuel : Développez le monde parallèle
| Sujet: Re: Position d'un point dans l'espace - 3D Mer 20 Fév 2013 - 21:14 | |
| Mais depuis le début onilink_ tu parle de AABB et j'ai beau chercher dans le forum je voit pas de quoi tu parle |
|
| |
Shurigame Habitué
Messages : 83 Localisation : Tours Projet Actuel : Développez le monde parallèle
| Sujet: Re: Position d'un point dans l'espace - 3D Mer 20 Fév 2013 - 21:42 | |
| Je pense avoir trouvé une solution, dites-moi ce que vous en pensez : J'ai créé un sprite en plaçant un screen_save_part() dans le code de l'animation : Ensuite je vait faire la collision en 3 partie : - collision sprites
- chercher le sphère ( en jaune ) la plus proche
- comparaison entre obj_bullet.z et z1[i] ( z de la sphère la plus proche )
Alors ? Qu'est ce que vous en pensez, j'ai un peu d'expérience mais pas autant que vous |
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Position d'un point dans l'espace - 3D Mer 20 Fév 2013 - 22:45 | |
| AABB c'est Axis Aligned Bounding Box. En gros une boite, et les collisions entre 2 boites sont super simples a gérer, juste quelques conditions.
Sinon pour ton truc la c'est du bricolage, ça a pas l'air très pratique... |
|
| |
Shurigame Habitué
Messages : 83 Localisation : Tours Projet Actuel : Développez le monde parallèle
| Sujet: Re: Position d'un point dans l'espace - 3D Mer 20 Fév 2013 - 22:51 | |
| Oui je sais que c'est un peut du bricolage, mais normalement ça marche mais là justement j'ai un problème, voici mon code : - Code:
-
Other = instance_position(xt,yt,squelette) if Other!=-4 then { test=2 for (i=0; i<19; i+=1) { if point_distance(x,y,squelette.x2[i],squelette.y1[i])<=1 then { test=3 if point_distance(x,z,squelette.x2[i],squelette.z1[i])<=1 then { test=4 if point_distance(y,z,squelette.y1[i],squelette.z1[i])<=1 then { test=5 instance_create(xf,yf,eft_impact) touch = true}}}; }; }
Mais alors que je regarde en plein dedans il s’arrête à test=2, en clair il me dit qu'il traverse le sprite sans rencontrer aucune sphère. Je vois pas l'incohérence dans ce code. Est ce que tu voit ? De plus je voudrait bien en apprendre plus sur tes - onilink_ a écrit:
- Axis Aligned Bounding Box
, stp. |
|
| |
Shurigame Habitué
Messages : 83 Localisation : Tours Projet Actuel : Développez le monde parallèle
| Sujet: Re: Position d'un point dans l'espace - 3D Mer 20 Fév 2013 - 23:03 | |
| C'est bon j'ai corrigé mais erreur de variable, x au lieu de xt ...etc Voilà ça marche sans laguer mais il reste un petit problème c'est qu'il detecte qu'au niveau des articulation donc de mes sphère.
|
|
| |
Shurigame Habitué
Messages : 83 Localisation : Tours Projet Actuel : Développez le monde parallèle
| Sujet: Re: Position d'un point dans l'espace - 3D Mer 20 Fév 2013 - 23:04 | |
| Voilà le code corrigés pour voir : - Citation :
Other = instance_position(xt,yt,squelette) if Other!=-4 then { test=2 for (i=0; i<19; i+=1) { if point_distance(xt,yt,squelette.x2[i],squelette.y1[i])<=1 then { test=3 if point_distance(xt,zt,squelette.x2[i],squelette.z1[i])<=1 then { test=4 if point_distance(yt,zt,squelette.y1[i],squelette.z1[i])<=1 then { test=5 instance_create(xf,yf,eft_impact) touch = true}}}; } }
|
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Position d'un point dans l'espace - 3D Mer 20 Fév 2013 - 23:13 | |
| Shurigame alias triplepostman. T'as un bouton editer en haut a droite. |
|
| |
Shurigame Habitué
Messages : 83 Localisation : Tours Projet Actuel : Développez le monde parallèle
| Sujet: Re: Position d'un point dans l'espace - 3D Mer 20 Fév 2013 - 23:18 | |
| |
|
| |
-Coco- Utilisateur confirmé: Rang ***
Messages : 545 Localisation : Grenoble - Montpellier Projet Actuel : Orion VII - 0%
| Sujet: Re: Position d'un point dans l'espace - 3D Jeu 21 Fév 2013 - 17:43 | |
| Tu sais que 100 calculs par frame (ou même le triple) c'est absolument rien pour un processeur de base ? C'est la principale différence entre un ordi et une Ti 83 x) _________________ Oh, snap.
|
|
| |
Shurigame Habitué
Messages : 83 Localisation : Tours Projet Actuel : Développez le monde parallèle
| Sujet: Re: Position d'un point dans l'espace - 3D Jeu 21 Fév 2013 - 18:02 | |
| Ca je le voit bien, j'aurai fait ça sur ma caltos elle aurait grillée PN : J'ai fait des prog sous Casio |
|
| |
Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: Re: Position d'un point dans l'espace - 3D Jeu 21 Fév 2013 - 18:46 | |
| - Shurigame a écrit:
- Ca je le voit bien, j'aurai fait ça sur ma caltos elle aurait grillée
PN : J'ai fait des prog sous Casio J'ai fait un mario : 5-10s de chargement pour le niveau, pareil si tu veux changer de niveau (mais faut encore le charger après...) et de nouveau 5-10 secondes si tu veux enlever les caisses.... Donc, si je veux faire un niveau avec mon éditeur de map, il faut charger le niveau dans la matrice de l'éditeur, attendre qu'il la charge (2secondes), recharger la map dans le jeu, attendre le chargement de la map le premier pour mettre la map dans la matrice et le deuxième pour l'afficher), et a la fin nettoyer la map... Donc en gros, quand je fait un niveau, je passe environ 40s a chaque test... Donc qu'on arrête de se plaindre de la vitesse de GM |
|
| |
-Coco- Utilisateur confirmé: Rang ***
Messages : 545 Localisation : Grenoble - Montpellier Projet Actuel : Orion VII - 0%
| Sujet: Re: Position d'un point dans l'espace - 3D Jeu 21 Fév 2013 - 19:41 | |
| En fait c'était pour dire que t'as pas trop d'inquiétude à avoir au niveau quantité de calculs à effectuer. Et sinon je ne dénie pas les capacités de la TI (ou casio), c'est juste qu'elle a un processeur à 60 hz (pour avoir programmé en assembleur dessus, je peux garantir qu'on peut tout de même réussir à en sortir des programmes franchement intéressants) _________________ Oh, snap.
|
|
| |
Contenu sponsorisé
| Sujet: Re: Position d'un point dans l'espace - 3D | |
| |
|
| |
| Position d'un point dans l'espace - 3D | |
|