2009-05-23 7 views
2

Ich weiß, wie man den Schnittpunkt zwischen einem Punkt und einem Dreieck testet.Punkt-Dreieck-Schnittpunkt in 3d aus Mauskoordinaten?

... Aber ich verstehe es nicht, wie ich die Startposition des Punktes genau auf die Bildschirmebene verschieben kann, indem ich meine Mauskoordinaten benutze, also sollte sich der Punktwinkel ändern, je nachdem, wo der Mauszeiger auf dem Bildschirm ist. auch das sollte perfekt funktionieren, egal welchen perspektivenwinkel ich in meiner openGL-anwendung verwende, also wäre der spitzewinkel bei verschiedenen perspektivenwinkeln anders ... gluPerspective() ist die funktion, über die ich spreche.

+0

Was meinen Sie „um die Ausgangsposition des Punktes bewegen“? Ein Punkt ist ein Punkt. Bekomme ich meinen Standpunkt? ;) – ralphtheninja

+0

Kannst du klarstellen, was deine Frage ist? Sie fragen, wie Sie einen Punkt genau bewegen können? –

Antwort

2

Nun, werde eine Aufnahme machen und rate mal, was du meinst. Die Vermutung ist, dass Sie Objekte mit Ihrer Maus auswählen möchten. Überprüfen Sie heraus:

glUnProject.

Dadurch werden die Bildschirmkoordinaten wieder in 3D-Weltkoordinaten umgewandelt.

Google hat mehr Informationen, wenn Sie auf Probleme stoßen.

Prost!

1

ja, ich möchte den Punkt auf der Bildschirmebene verschieben, also zum Beispiel könnte ich einen Würfel an diesem Punkt, wo meine Maus ist, mit 3D - Koordinaten, und dann schieße ich eine Linie von dieser Position auf die Ort, wo meine Maus zeigt, so würde es das Dreieck in meiner 3D-Welt treffen, und das, wie ich dieses Objekt mit der Maus auswählen könnte.

leid ist unklar:/

-

Edit: yay Ich habe es mit dem nehe Tutorial zu arbeiten! Danke, ich wusste nicht, dass es so einfach wäre!

Dies ist der Code im jetzt verwenden und es funktioniert super:

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

Sie müssen sich durch die Mausposition einen Strahl (Linie) erzeugen, die senkrecht auf den Bildschirm übergeben.

Ich würde empfehlen, einige grundlegende Informationen über 3D-Geometrie und 2D-Projektionen zu erhalten, bevor Sie viel weiter gehen.

Check out Wikipedia

A book search on Google gekommen ist, mit ganz wenigen Titel auf.

Foley & Van Dam ist allerdings das definitive Buch - hier auf Amazon.co.uk oder hier auf Amazon.com