Die Maus in OpenGL



  • Hi,
    ich weis das gehört hier nicht rein, aber sonst wüste ich nicht wo. 🙄
    Allso, wie kann man die bewegungen der Maus messen.
    Da ich einen 3D Shooter machen will, will ich die Maus immer wieder in der Mitte zentrieren und die bewegungen messen.
    Welche Befehle gibt es in dieser hinsicht???
    mfg DKing 😃
    cya



  • Ich würde DI benutzten, das machen AFAIK sogar Carmacks OGL-Engines so.

    Bye, TGGC (Für echte Fans)



  • sry, verstehe kein Wort 😕



  • Gott der 2. schrieb:

    verstehe kein Wort

    Ich denk, du bist mein Nachfolger?

    Was ist denn unklar?

    Bye, TGGC (Für echte Fans)



  • DI = DirectInput.

    Ich würde SDL dafür verwenden; dann kannst Du Dein Programm portabel halten.



  • k thx



  • Ich habe es nun mit DI, (komm mit SDL leider nicht zurecht) gemacht:
    Ich hab die ganze Sache Initialisiert(kann sein das ich ausversehen was vergessen hab 🙂 ):

    // DirectInput8-Objekt anlegen
        if(FAILED(DirectInput8Create(hInst, DIRECTINPUT_VERSION, 
                                     IID_IDirectInput8,(void**)&lpDI,NULL)))
        { 
            return Error("Fehler beim Anlegen des DirectInput8-Objekts");
        } 
    
        // Gerät für die Mouse festlegen
        if(FAILED(lpDI->CreateDevice(GUID_SysMouse, &lpDIMouse, NULL)))
        {
            return Error("Fehler beim Anlegen des Mouse-Geräts");    
        }
    
        // c_dfDIMouse ist eine vordefinierte Variable
        if(FAILED(lpDIMouse->SetDataFormat(&c_dfDIMouse)))
        {
            return Error("Fehler beim Setzen des Datenformats");        
        }
    
        // Kooperationsebene festlegen
        if(FAILED(lpDIMouse->SetCooperativeLevel(hWnd,DISCL_FOREGROUND | 
                                                      DISCL_NONEXCLUSIVE)))
        {    
            return Error("Fehler beim Setzen des Kooperationsebene (DirectInput)");        
        }
    
        // Struktur, die auch die Mousepuffergröße enthält
        DIPROPDWORD DIProperties;
        ZeroMemory(&DIProperties,sizeof(DIProperties));
        DIProperties.diph.dwSize       = sizeof(DIPROPDWORD);
        DIProperties.diph.dwHeaderSize = sizeof(DIPROPHEADER);
        DIProperties.diph.dwObj        = 0;
        DIProperties.diph.dwHow        = DIPH_DEVICE;
        // Puffergröße festlegen
        DIProperties.dwData            = 16;
    
        // Puffergröße für Mouseeingaben setzen
        lpDIMouse->SetProperty(DIPROP_BUFFERSIZE, &DIProperties.diph);
    
        // Zugang zur Mouse verschaffen
        lpDIMouse->Acquire();
    

    In der Schlaife sieht das ganze dann so aus:

    DWORD NumElements = 1;
        DIDEVICEOBJECTDATA data;
        ZeroMemory(&data,sizeof(data));
    
        if(FAILED(lpDIMouse->GetDeviceData(sizeof(data),&data,&NumElements,0))) 
        { 
            // die Mouse wurde zwischenzeitlich von einer andere Anwendung 
            // genutzt -> Kontrolle wiederholen
            lpDIMouse->Acquire();
            return;
        } 
    
        HDC hDC = GetDC(hWnd);
    
        // Mausbewegung bestimmen
        switch(data.dwOfs)
        {
            case DIMOFS_X:            
    
                break;
    
            case DIMOFS_Y:
    
                break;
    
            case DIMOFS_BUTTON0:
    
                break;
    
            case DIMOFS_BUTTON1:
    
                break;
    

    Die Frage ist wie ich das messen kann, wieviel er sich bewegt hat?
    Und wie kann ich die Maus zu 320,240 zurücksetzen, damit er die eingaben wie gewolt entgegennimmt(allso das er die bewegungen aufnimmt und dann zurückspringt, wie bei einen Shooter halt 🤡 )?
    mfg
    cya



  • Siehe Samples im DXSDK.

    Bye, TGGC Deine Unterstützung wird gebraucht!


Anmelden zum Antworten