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

Langage Java Discussion :

Créer un rayTrace


Sujet :

Langage Java

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 39
    Points : 1
    Points
    1
    Par défaut Créer un rayTrace
    Bonjour a tous,

    Je suis actuellement en train de créer un jeu 3D et j'ai besoin d'avoir une fonction qui me retourne l’entité que je regarde, mais je n'est pas réussi a le faire.

    Voici mon code actuel:

    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
    26
    27
    28
    29
    30
    31
    32
    33
    public Entity rayTrace()
        {
            if(entity instanceof EntityPlayer)
            {
                Vector3f cam = ((EntityPlayer)this.entity).getCameraPos();
                float distanceZ = (float)(Math.cos(Math.toRadians(this.entity.getRotY())) * 0.3f);
                float distanceX = (float)(Math.sin(Math.toRadians(this.entity.getRotY())) * 0.3f);
                Vector3f playerDirection = new Vector3f(cam.x + distanceX, cam.y, cam.z + distanceZ);
                Vector3f playerView = MathHelper.coordinate(cam, playerDirection);
     
                for(Entity entity : Entity.entityList)
                {
     
                    for(int k = 0; !entity.hitBox.collideWithVector(playerView); k++)
                    {
                        playerView = MathHelper.coordinate(cam.translate(k, 0, k), playerDirection.translate(k, 0, k));
                        if(entity.hitBox.collideWithVector(playerView))
                        {
                            System.out.println(entity);
                            return entity;
                        }
                        if(k>10)
                            break;
                    }
                }
            }
            return null;
        }
     
    public boolean collideWithVector(Vector3f vec)
        {
            return(vec.x > this.minX && vec.x < this.maxX && vec.y > this.minY && vec.y < this.maxY && vec.z > this.minZ && vec.z < this.maxX);
        }
    les methode utiliser dans la classe MathHelper:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public static Vector3f coordinate(Vector3f vec1, Vector3f vec2)
        {
            return new Vector3f(vec2.x - vec1.x, vec2.y - vec1.y, vec2.z - vec1.z);
        }

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    Par défaut
    Ou est ta fonction de test d'intersection Ray->Box ?
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 39
    Points : 1
    Points
    1
    Par défaut
    c'est la fonction collideWithVector que j'ai posté

  4. #4
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    Par défaut
    Ta fonction elle teste si un point est dans une boite. Pas si un rayon touche une boite on dirait plutot. Est tu sûre que c'est bien ce que tu veux ? (mais j'en doute...)
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 39
    Points : 1
    Points
    1
    Par défaut
    a oui exact, mais du coup comment modifier ca?

  6. #6
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    Par défaut
    En général, il faut 3 paramètre pour faire un test Rayon->Boite. (Toi tu en as 2 jusque la, le param 1 et le 3 si je ne me trompe pas).

    Paramètre 1 les bouding box de la boite.
    Paramètre 2 l'origine du rayon (le jour j'imagine).
    Paramètre 3 la direction du rayon.

    Google devrait te trouver tout ce que tu voudrais, mais pour commencer ceci devrait peut être te mettre sur la piste http://gamedev.stackexchange.com/que...ion-algorithms ou peut être même dans http://matthieu-brucher.developpez.c.../3D/raytracer/ la je pense que y'a quelque chose.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 39
    Points : 1
    Points
    1
    Par défaut
    bha la non car c'est pour détecter l'entité que je regarde et non réfléchir la lumière du jour, je suis complètement perdu dans la réalisation de ce rayTrace

  8. #8
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    Par défaut
    Ouais mais non t'as pas bien parcouru tout, je suis presque sur d'avoir vu la formule dans la partie 4...

    http://matthieu-brucher.developpez.c...g-boundingbox/
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 39
    Points : 1
    Points
    1
    Par défaut
    a je n'es pas regarde ces tuto, par contre il est en quand langage C++ non? (je sais que ca ne change rien c'est juste pour info ^^ )

  10. #10
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 39
    Points : 1
    Points
    1
    Par défaut
    Un mec ma passer ce code qu'il a tirer d'un post:
    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
    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;
        }
    malheureusement je n'arrive pas a comprend ce que fait la methode rechercherSommetsVoisins(), sachant que la personne ne la donnais pas.

    pouvez vous m'aider a trouver ca?

    PS: la personne a fait du mi anglais, mi français, je vais tous passer en anglais car la c'est assez moche

Discussions similaires

  1. [CR] Est il possible de créer des univers avec Seagate Info?
    Par Frank dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 27/06/2002, 15h22
  2. Créer un interpréteur de langage inspiré du Basic
    Par Picasso dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 11/05/2002, 17h10
  3. Comment faire pour créer un bitmap
    Par GliGli dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/04/2002, 15h41
  4. Peux t'on créer une copie locale de l'objet partagé?
    Par Anonymous dans le forum CORBA
    Réponses: 8
    Dernier message: 16/04/2002, 16h20

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