AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  Connexion  

Partagez
 

 Convertir curseur 2d en position 3d

Aller en bas 
AuteurMessage
rospionne
Nouveau


Messages : 3

Convertir curseur 2d en position 3d Empty
MessageSujet: Convertir curseur 2d en position 3d   Convertir curseur 2d en position 3d EmptyJeu 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.
Convertir curseur 2d en position 3d 7107_original
Revenir en haut Aller en bas
arthuro
Utilisateur confirmé: Rang ****
arthuro

Messages : 1444
Localisation : Paris
Projet Actuel : Diagon https://arthursonzogni.com/Diagon

Convertir curseur 2d en position 3d Empty
MessageSujet: Re: Convertir curseur 2d en position 3d   Convertir curseur 2d en position 3d EmptyVen 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.

_________________
Convertir curseur 2d en position 3d PochetteConvertir curseur 2d en position 3d Signature.php?gid=588
D'autres jeux :
In The Cube
In the cube 2
Revenir en haut Aller en bas
rospionne
Nouveau


Messages : 3

Convertir curseur 2d en position 3d Empty
MessageSujet: Re: Convertir curseur 2d en position 3d   Convertir curseur 2d en position 3d EmptyMar 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 ?
Convertir curseur 2d en position 3d Conver10
Convertir curseur 2d en position 3d Conver11

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
onilink_

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

Convertir curseur 2d en position 3d Empty
MessageSujet: Re: Convertir curseur 2d en position 3d   Convertir curseur 2d en position 3d EmptyMar 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:
Convertir curseur 2d en position 3d MVP

Convertir curseur 2d en position 3d Nondeforme

Multiplier par la matrice de projection:
Convertir curseur 2d en position 3d Homogeneous


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.

_________________
Convertir curseur 2d en position 3d Runningpotato1Convertir curseur 2d en position 3d TvF6GED
Revenir en haut Aller en bas
Contenu sponsorisé




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

Revenir en haut Aller en bas
 
Convertir curseur 2d en position 3d
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» savoir la position de l'enfant dans son ventre
» Position des jambes en Manduca
» ballon
» [résolu]Sauvegarde AVANT conversion - solution : *.bk12 = *.h11 avant conversion
» Question de Société

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: