2009-05-23 15 views
2

Je sais comment tester l'intersection entre un point et un triangle.intersection de point-triangle en 3d à partir des coordonnées de la souris?

... Mais je ne comprends pas, comment je peux déplacer la position de départ du point sur le plan de l'écran précisément en utilisant mes coordonnées de souris, donc l'angle de point devrait changer en fonction de l'emplacement du curseur de la souris cela devrait aussi fonctionner parfaitement quel que soit l'angle de perspective que j'utilise dans mon application OpenGL, donc l'angle du point serait différent sur différents angles de perspective ... gluPerspective() est la fonction dont je parle.

+0

Que voulez-vous « déplacer la position de départ du point »? Un point est un point. Obtenez mon point? ;) – ralphtheninja

+0

Pouvez-vous clarifier votre question? Vous demandez comment vous pouvez déplacer un point avec précision? –

Répondre

2

Eh bien, je vais essayer de deviner ce que vous voulez dire. La supposition est que vous aimeriez choisir des objets avec votre souris. Extraire:

glUnProject.

Ceci transforme les coordonnées de l'écran en coordonnées 3D du monde.

Google a plus d'informations si vous rencontrez des problèmes.

À la votre!

1

oui, je veux déplacer le point sur le plan de l'écran, par exemple je pourrais rendre un cube sur ce point où ma souris est actuellement, en utilisant des coordonnées 3d, puis je tire une ligne de cette position à la endroit où ma souris pointe, de sorte qu'il frapperait le triangle dans mon monde en 3D, et comment je pourrais sélectionner cet objet avec la souris.

désolé d'être clair:/

-

Edit: youpi je l'ai eu à travailler avec ce tutoriel nehe! merci, je ne savais pas que ce serait aussi simple que ça!

Ceci est le code im en utilisant maintenant et il fonctionne très bien:

void GetOGLPos(int x, int y, GLdouble &posX, GLdouble &posY, GLdouble &posZ){ 
    GLint viewport[4]; 
    GLdouble modelview[16]; 
    GLdouble projection[16]; 
    GLfloat winX, winY, winZ; 

    glGetDoublev(GL_MODELVIEW_MATRIX, modelview); 
    glGetDoublev(GL_PROJECTION_MATRIX, projection); 
    glGetIntegerv(GL_VIEWPORT, viewport); 

    winX = (float)x; 
    winY = (float)viewport[3]-(float)y; 
    glReadPixels(x, int(winY), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ); 

    gluUnProject(winX, winY, winZ, modelview, projection, viewport, &posX, &posY, &posZ); 
} 
0

Vous devez générer un rayon (ligne) en passant par l'emplacement de la souris perpendiculaire à l'écran.

Je vous recommande d'obtenir quelques informations de base sur la géométrie 3D et les projections 2d avant d'aller plus loin.

Découvrez Wikipedia

Un book search on Google est venu avec quelques titres.

Foley & Van Dam est bien le livre définitif - ici sur Amazon.co.uk ou ici sur Amazon.com