2010-11-19 6 views
2

Donc je fais un jeu en XNA 4.0 et j'ai un problème avec la traduction des coordonnées de la souris vers le monde 3D. J'ai utilisé la méthode Viewport.Unproject(), et cela fonctionne presque. Le problème est que ma projection est un "champ de vision" donc la distance par rapport au centre est exponentielle. Si je change la projection en perspective standard, mes objets 3D sont déformés. Existe-t-il une solution mathématique pour utiliser le champ de vision avec les données traduites à partir des coordonnées de la souris?Comment puis-je traduire les coordonnées de la souris en coordonnées 3D, avec une caméra aérienne, dans XNA 4.0?

Je fais actuellement du trig. pour calculer la largeur et la hauteur du plan éloigné, en fonction de la position de la caméra, la largeur & hauteur de la fenêtre, et l'angle fieldOfView. Y a-t-il une meilleure méthode? C'est presque mort.

+0

votre titre de la question devrait être: Comment faire évoluer le mouvement de la souris sur un champ de vision avec une certaine profondeur. – Moon

Répondre

0

J'ai le même problème, je n'ai pas compris l'explication technique jusqu'à ce que je lise votre question. Ce que j'ai fait est de traduire l'origine des coordonnées de la souris & puis de le diviser ou de le diviser par un facteur afin que les petits mouvements de la souris puissent être grossis à une plus grande échelle, loin derrière,

Difficile je n'ai pas compris mon problème est de perspective & champ de vision, c'est la souris se déplace sur l'écran ou la lentille de la caméra, et l'échelle que j'essaie de déplacer est loin derrière et plus grand, encore j'ai fait les maths pour le faire fonctionner. juste parce que je l'ai vu la différence d'échelle exponentielle, est simple

C'est ce que je l'ai fait

translated-X = { mouse-X + (screenwidth/2) }/2.7; 
translated-Y = {-mouse-Y + (screenHeight/2)}/2.8; 

et méthode avec les valeurs actuelles adapte bien pour mes réglages actuels, qui sont

  • appareil photo est à (0,0,260)
  • pour chaque article j'ai coordonnées (x, y, 0), donc ils sont à X & Y avion
  • ma résolution d'écran, PreferredBackBufferWidthxHeight est 1024 x 768

seulement pour les trois conditions ci-dessus fonctionne mon équation.

mais si le changement l'une des valeurs ci-dessus je vais devoir ajuster les équations selon les scénarios, de sorte que ces valeurs codées en dur 2.7 & 2.8 auront des variables & devront être calculées en fonction de la position de la caméra & Résolution de l'écran

ce 2.7 & 2.8 maintient l'échelle jusqu'à un certain point, maintenant

la formule générique pour la traduction, je pourrais formuler que, par la technique appelée Analyse numérique, je suis bon à cela, mais pour cela j'ai besoin de données que je ne peux pas obtenir par moi-même, je dois trouver la distance de la caméra, paramètres de perspective à laquelle certaine résolution est entièrement dans le champ de vision. C'est-à-dire, si ma résolution est de 1024x768, à partir de la distance de la caméra en regardant l'origine, nous voyons réellement 1024 points autour de l'axe des x et 768 points autour de l'axe des y. De même, j'ai besoin d'au moins deux lectures supplémentaires pour des résolutions plus élevées.

Et je ne peux pas obtenir ces valeurs parce que mon vieux moniteur stupide soutient au maximum 1024x768, je ne peux pas aller plus haut. Si vous pouvez me donner la distance de la caméra pour plusieurs résolutions, je vais formuler une relation et proposer une formule générique.

il
+0

p.s il n'est pas destiné à être une réponse juste à un problème et une solution possible. – Moon

+0

il me brise aussi que Microsoft Developers a résolu ce problème, tout en développant Microsoft Surface. Parce qu'il a le même problème mais de manière inverse la sortie est projetée sur un écran et l'entrée est prise et selon l'écran projeté tandis que la résolution réelle est beaucoup moins. – Moon

Questions connexes