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
| public static Vector3f intersectionWithBox(Vector3f rayon, Vector3f posCam, Vector3f[] points)
{
Vector3f avant, pointCollision;
// Position du personnage par rapport au polygone.
// On recherche le point le plus près du personnage.
avant = MathHelper.getNearest(rayon, points);
Vector3f[] face = rechercherSommetsVoisins(rayon, points);
if(face[0] != null && face[1] != null)
{
Vector3f a = MathHelper.subVector(avant, face[0]);
Vector3f b = MathHelper.subVector(avant, face[1]);
Vector3f normale = MathHelper.crossProduct(a, b);
a = MathHelper.subVector(avant, rayon);
b = MathHelper.subVector(posCam, rayon);
float denominateur = MathHelper.scalarProduct(normale, a);
float numerateur = MathHelper.scalarProduct(normale, b);
pointCollision = avant;
if(denominateur == 0)
{
return null;
}
else
{
float u = numerateur / denominateur;
for(int i = 0; i < 3; i++)
MathHelper.addFloatToVector(pointCollision, u, u, u);
return pointCollision;
}
}
else
return null;
} |
Partager