AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  Connexion  

Partagez | 
 

 Convertir curseur 2d en position 3d

Aller en bas 
AuteurMessage
rospionne
Nouveau


Messages : 3

MessageSujet: Convertir curseur 2d en position 3d   Jeu 9 Nov 2017 - 15:18

Bonjour, après plusieurs recherches, je n'ai pas trouvé ou compris sur comment transformer la position du curseur 3d sur une surface 3d en fonction de la position de la caméra. Faites vous m'aider. Merci d'avance.
Revenir en haut Aller en bas
arthuro
Utilisateur confirmé: Rang ****
avatar

Messages : 1365
Localisation : Grenoble / Méribel
Projet Actuel : CBNA

MessageSujet: Re: Convertir curseur 2d en position 3d   Ven 10 Nov 2017 - 20:40

Techniquement, ton curseur pointe dans une direction et non dans une position. Il faut donc plutôt regarder la collision entre une droite et ta surface. Ca dépend donc beaucoup de ta surface.

Si tu souhaite j'ai un projet où je fais cela:
https://github.com/ArthurSonzogni/postwimp (La réalité virtuelle avant l'heure)


(voir l'exemple avec la souris à 1 minute 36)


En particulier ce fichier:
https://github.com/ArthurSonzogni/postwimp/blob/master/src/application/Controller/GameActionControllerMouse.cpp

Code:

void GameActionControllerMouse::update(GameAction& gameAction, Application& application)
{
    const float T = height;
    float mouseX = float(Input::mouseX()) / float(application.getWidth()) ;
    float mouseY = 1.0-float(Input::mouseY()) / float(application.getHeight()) ;
    mouseX = 2.0*mouseX-1.0;
    mouseY = 2.0*mouseY-1.0;
    // inverse mouse position
    glm::mat4 inverse = glm::inverse(gameAction.projection*gameAction.view);
    glm::vec4 m1 = inverse*glm::vec4(mouseX,mouseY,+0.0,1.0);
    glm::vec4 m2 = inverse*glm::vec4(mouseX,mouseY,+1.0,1.0);
    m1 = m1/m1.w;
    m2 = m2/m2.w;
    float lambda = (m1.z-T)/(m1.z-m2.z);
    glm::vec3 p = glm::vec3(m1 + (m2-m1) * lambda);
    gameAction.brush.position = p;
}

Un petit coup d'oeil vers cette présentation peut aider aussi:
http://devernay.free.fr/cours/vision/pdf/vision3_projective.pdf

Si ta surface est un plan.
Je vais reprendre mon bout de code en essayant de l'expliquer.

Supposons que tu utilise deux matrices une de projection(P) et une de placement de caméra(V). Posons leurs produit M = P*V
Supposons que ta souris se trouve en (x,y) sur l'écran.
Donc dans le repère de l'écran, la direction de la souris est : (x,y,z) ou z varie.
Dans le repère de ton monde la direction de la souris est inverse(M) * (x,y,z,1)

Pour reconstruire la droite, tu peut prendre deux points de la droite:
M1 = inverse(M) * (x,y,0,1)
M2 = inverse(M) * (x,y,1,1)

(Attention à bien repasser de coordonnées projective à des coordonnées normales).

Ensuite, j'avais par exemple choisi le plan z = 0.
Puisque ma droite c'est l’ensemble: (X,Y,Z) = M1 + lambda*(M2-M1), il faut trouver lambda pour que Z = 0.
Donc lambda = (-M1.z) / (M2.z - M1.z)

Donc ton point est en M1 + lambda*(M2-M1)

-----------------------------

N'hésite pas à poser des questions, c'est pas facile.

_________________

D'autres jeux :
In The Cube
In the cube 2
Revenir en haut Aller en bas
rospionne
Nouveau


Messages : 3

MessageSujet: Re: Convertir curseur 2d en position 3d   Mar 14 Nov 2017 - 8:43

Bonjour,

J'ai lu plusieurs fois l'explication sur l'utilisation des fuites de perspective. Et j'ai du mal a comprendre comment on peut définir différents angle a partir de la position d'une souri.  Y a t'il un point de départ de la fuites de perspective ?



Le script de ton message m'est encore obscure. Je me demande, d'ou vienne ces variable. A qui servent certaine. Cette formule calcul quel partie de la conversion. Sans commentaire sur chaque partie, j'ai des difficulté à visualisé dans ma tête, les différents résultats.

J'ai regardé le document pdf, mais c'était trop cousit  pour moi.

Pouvez vous me décrire plus précisément son fonctionnent. N'hésitez pas de user de schéma, si ça peu aider. Merci d'avance.
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

Messages : 8973
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: Convertir curseur 2d en position 3d   Mar 14 Nov 2017 - 10:03

Si tu comprends l'anglais cette page est un must have pour comprendre les projections:
http://www.opengl-tutorial.org/beginners-tutorials/tutorial-3-matrices/#the-model-view-and-projection-matrices

En résumé, t'as une série de transformation qui permettent de projeter tes objets virtuellement en 3d sur ton écran 2d:




Multiplier par la matrice de projection:



Dans ton cas, il faut que tu trouves un moyen de récupérer les matrices utilisées par game maker, afin de pouvoir faire tes calculs ensuite.

_________________
                 
Revenir en haut Aller en bas
Contenu sponsorisé




MessageSujet: Re: Convertir curseur 2d en position 3d   

Revenir en haut Aller en bas
 
Convertir curseur 2d en position 3d
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» position pour l'expulsion...
» Position latérale de sécurité
» Le roi Abdallah Ier d’Arabie Saoudite a décidé de se convertir au christianisme.
» Convertir un document .ppsx en .ppt
» reconnaitre position de bébé??

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Développement :: Entraide confirmés-
Sauter vers: