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!