OpenGL und die Maus



  • Okay, dann nehme ich GLUT. 😃



  • globalplayer schrieb:

    Okay, dann nehme ich GLUT. 😃

    Tja, Du hattest 'ne 50:50-Chance... Daneben! 😃



  • Ok, bevor ich Haus und Hof verliere, zurück zum Thema. 😉

    Mein eigentliches Problem ist folgendes:
    Ich möchte mit der Maus zwei Punkte in einem RenderContext auswählen; zwischen diesen beiden Punkten soll dann mit OpenGL eine Linie gezogen werden.

    Ich muß also die Koordinaten des Windows-DeviceContextes in die des OpenGL-RenderContextes umwandeln.
    Die Formel lautet:

    RCmaus = DCmax / RCmax * DCmaus

    RC = RenderContext(OpenGL-Fenster)
    DC = DeviceContext(Win32-Fenster)
    max = Maximale Windows/OpenGL-Koordinate des Fensters
    maus = Aktuelle Position des Mauszeigers

    DCmaus und DCmax habe ich, aber ich brauche mindestes noch RCmax oder RCmaus um die Gleichung lösen zu können.

    Das heißt, entweder eine Funktion, die mir den Maximalwert des OpenGL-Fensters zurückgibt, oder eine Funktion, die mir die aktuelle Mausposition im OpenGL-Fenster liefert.

    Vielen Dank für die Hilfe,
    globalplayer



  • 3D? Dann ist es nicht so einfach... "Picking"!



  • Nee, 2D.



  • Dann bastel dir erstmal eine Ortho-Darstellung und mappe die genau auf deine Fenster-Größe. Dann holst du dir über 0815 Win32-Funktion die Maus-Koordinaten oder fängst die Fenster-Nachricht ab und malst die Linie.



  • So wie ich es versteh, soll es plattformunabhängig sein. Daher Koordianten per SDL oder sowas holen.

    Bye, TGGC Deine Unterstützung wird gebraucht!



  • TGGC schrieb:

    So wie ich es versteh, soll es plattformunabhängig sein. Daher Koordianten per SDL oder sowas holen.

    Nö, das kann ruhig reines Win32 sein. 🙂

    Und nochmal: Ich brauche einfach eine Funktion, die mir z.B. die aktuelle Mauskoordinate in 2D liefert!
    Gibt es sowas in GLUT, und wenn ja, wie heißt die Funktion?



  • Sag das doch gleich! IIRC: GetCursorPos, aber blätter lieber selbst nochmal in der MSDN.

    Bye, TGGC Deine Unterstützung wird gebraucht!



  • TGGC schrieb:

    Sag das doch gleich! IIRC: GetCursorPos, aber blätter lieber selbst nochmal in der MSDN.

    "No,no,noho - you don't love me and I know now" *melancholischsing* 😃

    Ich mein genau sowas - nur halt für den RenderContext - also das OpenGL-Fenster! Die Maus-Werte x und y in OpenGL-Koordinaten!

    PS
    Das mit glOrtho ist glaube ich auch viel versprechend.



  • Cpp_Junky schrieb:

    Dann bastel dir erstmal eine Ortho-Darstellung und mappe die genau auf deine Fenster-Größe. Dann holst du dir über 0815 Win32-Funktion die Maus-Koordinaten oder fängst die Fenster-Nachricht ab und malst die Linie.

    Hört sich toll an - geht aber irgendwie nicht:
    Ich poste mal das Problem als Code

    [cpp]
    case WM_LBUTTONUP: //Die Beiden Punkte für die Line
    {
    if(isSecond)
    {
    x2 = LOWORD(lParam);
    y2 = HIWORD(lParam);
    isSecond =! isSecond;
    }
    else
    {
    x1 = LOWORD(lParam);
    y1 = HIWORD(lParam);
    isSecond =! isSecond;
    }
    break;
    }

    //......Code.........

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    glOrtho(-1.5,1.5,-1.5,1.5,-1.0,100);
    //glOrtho(300.0,300.0,300.0,300.0,-1.0,100);

    glTanslatef( 0.0f,0.0f,-1.0f);

    //Hier die oben beschriebene Formel
    //->konvertiert ein Koordinatensystem in ein Anderes
    **float xGl1 = (1.5/300.0)*x1;
    float yGl1 = (1.5/300.0)*y1;
    float xGl2 = (1.5/300.0)x2;
    float yGl2 = (1.5/300.0)y2;

    glBegin(GL_LINES);
    glColor3f(10.0f,10.0f, 0.0f);
    glVertex2f(xGl1 ,yGl1);
    glVertex2f(xGl2 ,yGl2);
    glEnd();

    SwapBuffers(hDC);
    [/cpp]

    Vielen Dank für die Hilfe 🙂


Anmelden zum Antworten