Toon posts:

[Opengl] Muispositie in Opengl

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil graag weten waar ik met m'n muis klik als ik gebruik maak van perspectief in opengl. Omdat door het perspectief alles kleiner/groter wordt weet ik niet precies waar ik met m'n muis klik. Het is trouwens 2d van boven.

Ik heb dus wel de normale muispositie, maar ik wil het omrekenen naar het gedeelte met perspectief.

Verwijderd

Gebruik de feedback buffer en/of de selection buffer. Zie glFeedbackBuffer(), glSelectBuffer() en glRenderMode() voor meer details. (indien je geen help hebt, zoek deze functies op bij Microsoft: http://msdn.microsoft.com/library klik dan op 'Graphics and multimedia in het linker menu, daarna OpenGL, daarna SDK Documentation, daarna OpenGL, daarna OpenGL Reference. )

Via windows kun je je muispointer achterhalen, die krijg je binnen bij elke muismove message en/of muisklik message. Daarna kun je mbv de feedback buffer kijken welke primitives er geselecteerd zijn. De feedback buffer bevat alle primitives in windowcoords, dus dat moet lukken :). Op het net circuleren verschillende examples hiervan hoor. ZOeken op feedback buffer zal al een paar opleveren.

Verwijderd

Topicstarter
Krijg ik met glFeedbackBuffer() de window coord van alle polygonen terug of de positie van de muis in opengl. Het gaat me alleen maar om de positie van de muis.

Verwijderd

-1 dubbelpost

Verwijderd

Positie muis haal je uit de WM_ messages. Hier een voorbeeldje:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
void
C3DTweakeroid::MessageHandler(HWND hWnd, UINT uMsg, WPARAM  wParam, LPARAM  lParam)
{
    int     iX, iY;

    switch(uMsg)
    {
        case WM_MOUSEMOVE:
        {
            if(m_bLMBDown)
            {
                // get X
                iX=GET_X_LPARAM(lParam);
                      // get Y
                iY=GET_Y_LPARAM(lParam);
                m_fCameraPanXAngle= m_fCameraPanXAngle + (float)(iY - m_iYPrev);
                m_fCameraPanYAngle= m_fCameraPanYAngle + (float)(iX - m_iXPrev);
                m_iXPrev=iX;
                m_iYPrev=iY;
            }
        };break;
        case WM_LBUTTONDOWN:
        {
            m_bLMBDown=true;
            iX=GET_X_LPARAM(lParam);
            iY=GET_Y_LPARAM(lParam);
        }; break;
        case WM_LBUTTONUP:
        {
            m_bLMBDown=false;
        };break;
    }
}

Verwijderd

Topicstarter
De positie van de muis in windows krijg ik gewoon van Delphi. Dus dat is geen probleem. Ik zal proberen het uit te leggen. :)

Ik heb een array met objecten erin. Die objecten worden afgedrukt met opengl. Sommige objecten kunnen bewegen.

Als iemand nou een bewegend object heeft geselecteerd en drukt op een positie ergens in de map dan wil ik graag weten waar hij nou precies geklikt heeft in normale coords(hiermee bedoel ik de Array coords). Daarna kan ik het bewegende object verplaatsen in de array en dus ook in het opengl scherm.

Ik hoop dat dit duidelijk is.

  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 03-09 16:40
http://nehe.gamedev.net/tutorials/lesson33.asp

Daar staat wat je weten wil. Helaas is deze tutorial nog niet naar Delphi geconverteerd, maar op zich, de OpenGL calls zullen overeen komen.

Ohja, wat jij wilt doen heet picking.

Zoek is wat rond op "opengl +picking"

Verwijderd

Topicstarter
Ja die les had ik al gedownload. Maar volgens mij is dat niet wat ik bedoel. Ik wil niet weten of ik een object raak.
Maar ik wil weten wat de muis positie is in opengl met perspectief. De muis beweegt per pixel normaal in delphi.

Als een object nou bijvoorbeeld 10 pixels is in het normaal.
En 11 pixels in opengl door perspectief. Dan wil ik graag de muispositie ook aangepast hebben zodat ik weet waar ik nou precies klik. Want ik heb de coordinaten van de objecten keihard in een array staan. En daar doe ik ook de pathfinding.

Of wordt dit toch bedoeld met picking :)

Verwijderd

Topicstarter
Worden in die buffer bij les 33 ook de x en y waarden opgeslagen. Dan kan ik een viewport om die muis maken en kijken op welke positie ben.

Verwijderd

Topicstarter
Is het mogelijk of niet.

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Ik weet zo de oplossing niet (ik heb het indertijd met picking opgelost) maar je moet beseffen dat er niet zoiets bestaat als een 'muis' in OpenGL. Redenerend vanuit het scherm kan je je een lijn voorstellen die vanaf de (2d) muispositie loodrecht in het scherm valt. De Z (of diepte)-Coordinaat is dus onbekend, en die zal je eerst moeten bepalen wil je verder rekenen met je muispositie.
Als ik het me goed herinner was hier wel een OpenGL functie voor die je een positie in world space kon teruggeven wanneer je de muispositie en Z positie meegaf.
Hope this helps :)

Verwijderd

Topicstarter
Hmm ik ga de msdn eens doorspitten naar zo'n functie. Ik zal hem hier posten als ik hem gevonden heb.

Iedereen in elk geval hartelijk dank.

Verwijderd

Topicstarter
Hmm beetje laat met de oplossing maar :

De functies zijn:

gluProject en gluUnProject

je kunt ze vinden in de msdn onder

Graphics and Multimedia/Opengl/SDK Documentation/Opengl/OpenglReference/GLU Functions

Ik heb die functie trouwens niet gebruikt maar heb het gewoon in glortho mode gedaan.


Veel plezier ermee
Pagina: 1