Jeux Libres

Envie de créer un jeu vidéo ?   Le site qui vous accompagne de A à Z.


» Les Forums » A propos de la création de jeux vidéo » Collision avec le sol.[premier essai]


Aller à la page : 1.

Collision avec le sol.[premier essai]
Lo



Grade : Expert
Inscrit le: 26 Dec 2007, 17:33
Ecrit le: 04 Juin 2009, 23:54             Message non corrigé


public static float calculerPointCollisionAvecTriangle  (Vec3t positionsPerso, Vec3t pointA, Vec3t pointB, Vec3t pointC) {
boolean vertical; //Vertical par rapport à x.
Vec3t pointM; //Milieu de la base, pour la hauteur.
//Si les valeurs x du bas de la pente sont les même, la base du triangle est perpediculaire à z dont verticale sur un plan 2D du sol.
Vec3t normale = pointA.crossProduct(pointC);
Vec3t forward = new Vec3t (0.0f, 0.0f, 1.0f);
//Si l'angle par rapport au vecteur gauche est compris entre 90 et -90, il est horizontal.
if (normale.produitScalaire(forward)>= 0 && normale.produitScalaire(forward) <= 1) {
vertical = true;
float sizeBase = pointB.getVec3t()[0] - pointA.getVec3t()[0];
pointM = new Vec3t (pointA.getVec3t()[0], pointB.getVec3t()[1], pointA.getVec3t()[2] + sizeBase / 2);
} else {
//Sinon la base du triangle est perpendiculaire à l'axe x donc horizontale sur un plan en 2D du sol.
vertical = false;
float sizeBase = pointB.getVec3t()[0] - pointA.getVec3t()[0];
pointM = new Vec3t (pointA.getVec3t()[0] + sizeBase / 2, pointB.getVec3t()[1], pointA.getVec3t()[2]);
}
//Position du personnage par rapport à M pour le produit scalaire.
float angle;
//Position du sommet par rapport à M pour le produit scalaire.
Vec3t pointCM = positionsPerso.additionner (pointM);
Vec3t positionsPersoA = positionsPerso.additionner(pointA);

//Calcul de l'angle du personnage par rapport au sommet
angle = (float) Math.acos(positionsPersoA.produitScalaire(pointCM));
if (pointC.getVec3t()[1] < pointM.getVec3t()[1])
angle = -angle;
//Calcul de la transaltion pour savoir de combien le personnage doit monter.
float valeur;
if (!vertical)
valeur = (float) ((pointC.getVec3t()[2] - pointM.getVec3t()[2]) * Math.cos(angle));
else
valeur = (float) ((pointC.getVec3t()[0] - pointM.getVec3t()[0]) * Math.cos(angle));

positionsPerso.translation(valeur, false, true, false);
//Calcul de la dénivellation de la base.
Vec3t denivellation = null;
if (!vertical)
denivellation = new Vec3t (pointB.getVec3t()[0], pointA.getVec3t()[0], pointB.getVec3t()[0]);
else
denivellation  = new Vec3t (pointB.getVec3t()[2], pointA.getVec3t()[0], pointB.getVec3t()[2]);
//Position de B par rapport à A pour le produit scalaire.

Vec3t pointBA = pointA.additionner(pointB);
Vec3t denivellationA = pointA.additionner(denivellation);
angle = (float) Math.acos(denivellationA.produitScalaire(pointBA));
if (pointB.getVec3t()[1] < pointA.getVec3t()[1])
angle = -angle;

valeur = (float) (positionsPerso.longueur() * Math.cos(angle));
if (pointB.getVec3t()[1] < pointA.getVec3t()[1])
positionsPerso.translation(valeur, true, false, true);
else
positionsPerso.translation(-valeur, true, false, true);
return valeur;
}
 

...A première vue je dirais des problème d'arrondissement ?

________
Parce qu'on ne peut s'exprimer que par nos créations. ^^
  Profil Mail
 


Aller à la page : 1.


Hébergeur du site : 1and1.fr



Site de création de Jeux Vidéo
Apprenez à créer vos propres Jeux Video

1198881 pages ont été consultées sur le site !
Dont 2365 pages pendant les 24 dernières heures.

Page générée en 0.322 secondes


Nos partenaires
- Otium Production : Aide aux débutants à créer leurs jeux
- Les bibliothèques de développement de jeux vidéo


  © 2005-2012 www.jeux-libres.com - Toute reproduction totale ou partielle du contenu de ce site est strictement interdite.