2012-02-17 2 views
2

Je reçois des coordonnées d'écran en utilisant ceci:écran Conversion vers les coordonnées monde

@Override 
public boolean onTouchEvent(MotionEvent ev) { 
x = ev.getX(0); 
y = ev.getY(0); 
return true; 
} 

Et ce sont les verticles de mon openGL 1.0 carré:

private float vertices[] = { 
     -1.0f, -1.0f, 0.0f,  // V1 - bottom left 
     -1.0f, 1.0f, 0.0f,  // V2 - top left 
     1.0f, -1.0f, 0.0f,  // V3 - bottom right 
     1.0f, 1.0f, 0.0f   // V4 - top right 
}; 

Tous ceux qui ont travaillé avec openGL sait , que si je collerais des variables x et y au lieu de verticles, j'aurais un non-sens absolu. Ma question est: quelle formule devrais-je utiliser pour convertir les coordonnées d'écran x et y en coordonnées du monde afin que je puisse les utiliser pour positionner mon carré au point touché?

EDIT:

Oops, j'ai oublié de dire que c'est un jeu en 2D ...

+0

Je ne sais pas OpenGL, mais vous avez pensé à utiliser 'getRawX () '(renvoie les coordonnées absolues) au lieu de' getX() '? –

Répondre

1

Il y a une fonction appelée 'gluunproject', qui peut le faire pour vous. Le lien est ici.

http://www.opengl.org/sdk/docs/man/xhtml/gluUnProject.xml

Par ailleurs, les coordonnées d'écran correspondra à une ligne passant 3D du centre de la caméra par l'intermédiaire des coordonnées d'écran (plans d'image).

Les entrées ModelView, projection et viewport peuvent être obtenues en interrogeant OpenGL sur les matrices actuelles. Reportez-vous au même lien (les appels de fonction sont spécifiés).

Outre les paramètres d'écran x et y, vous avez besoin du paramètre de profondeur ou du paramètre z. Vous pouvez utiliser la plage de profondeur pour placer le carré dans un plan z particulier. Ou donnez une valeur par défaut. Mais assurez-vous qu'il est à l'intérieur de la région visible.

Une fois que vous avez reçu les coordonnées de l'objet, considérez-le comme le centre du carré et dessinez un carré de la longueur requise.

Satish

+0

veuillez mettre à jour le lien – Dev

Questions connexes