Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
18.07.2002, 13:24
Gnomo



Hi!
Ich habe versucht mit der Maus zu Rotieren. hier der code
Quellcode:
void CENGINE_Camera::ENGINE_CheckforMouse()
{
    float sensitivity = 0.1f;
    int window_center_x = 1024 / 2;
    int window_center_y = 768 / 2;
    int mx, my;
    POINT cur_pos;

    GetCursorPos(&cur_pos);

    mx = cur_pos.x - window_center_x;
    my = cur_pos.y - window_center_y;

    if (mx == 0 && my == 0)
        return;

    float x = (float) mx * sensitivity;
    float y = (float) my * sensitivity;

    ENGINE_Rotate(y, x, 0.0f);

    SetCursorPos(window_center_x, window_center_y);
}

Aber es klappt nicht, d.h es wird nicht rotiert. Rotation per Tasten funzt aber. Hat da wer vielleicht ne Idee?

--

zum Seitenanfang zum Seitenende Profil || Suche
001
19.07.2002, 15:56
[RMen]OneStone



Debuggen und gucken wo's hackt.

--

georg-wicherski@pixel-house.net | http://www.pixel-house.net/ - Coding Resource| http://www.google.de/

zum Seitenanfang zum Seitenende Profil || Suche
002
19.07.2002, 16:10
Gnomo



Hab ich schon.hat nicht wirklich was gebracht.

--

zum Seitenanfang zum Seitenende Profil || Suche
003
19.07.2002, 17:23
[RMen]OneStone



Hast du in ENGINE_Rotate eine Addition zu ner static Variable gemacht, oder nur immer neu die Rotation gesetzt? Das würd' das Problem erklären...

--

georg-wicherski@pixel-house.net | http://www.pixel-house.net/ - Coding Resource| http://www.google.de/

zum Seitenanfang zum Seitenende Profil || Suche
004
20.07.2002, 12:35
Gnomo



Ich habe immer neu die Rotation gesetzt, so wie es da steht. Wie ist es denn richtig?

--

zum Seitenanfang zum Seitenende Profil || Suche
005
20.07.2002, 13:09
Archangel



poste mal den source deine ENGINE_Rotate...

--

Mar 01 01:10:13 <voice> jo
Mar 01 01:10:40 <voice> bis dann ^^
Mar 01 01:11:20 <Archangel> jo
**** ENDING LOGGING AT Tue Mar 1 01:58:13 2005

zum Seitenanfang zum Seitenende Profil || Suche
006
21.07.2002, 20:00
Gnomo



Falls du meinst daran liegsts.. Daran nicht die Rotate Funktion funzt wenn ich das ganze mit der Tastatur mache.

--

zum Seitenanfang zum Seitenende Profil || Suche
007
24.07.2002, 16:56
Gnomo



*push*

--

zum Seitenanfang zum Seitenende Profil || Suche
008
25.07.2002, 21:22
TheTinySteini



Mit der sensitivity hast du sicher schon mal rumgespielt, oder?
Ich verwende in einem Programm einen fast identischen Code - funktioniert einwandfrei.
Was passiert, wenn du die Maus sehr schnell bewegst, oder ruckartig? Denn wenn deine Engine sehr schnell läuft (sehr hohe fps), dann könnte es theoretisch passieren, dass zwischen zwei Frames die Maus noch kein einziges Pixel zurückgelegt hat...

[edit]
Ahja, und addiert deine Rotate-Funktion die übergebenen Werte zu der derzeitigen Rotation hinzu oder wird die Rotation komplett neu gesetzt? In letzterem Fall funktioniert der Code nämlich nicht, weil du ja immer nur Winkeländerungen im Bereich von einigen Zehntelgrad bis ein paar Grad bekommst. Wenn du die nun immer zurücksetzt, dann hast du natürlich auch keine Drehung (bzw. fast keine Drehung).

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy


Dieser Beitrag wurde am 25.07.2002 um 21:24 von TheTinySteini bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
009
26.07.2002, 17:40
Gnomo



Es passoert gar nichts, das ist es ja.Hier mal der Code der Rotate Funktion.
Hab ich von Stefan Zerbst.
Quellcode:
void CENGINE_Camera::ENGINE_Rotate(float fX, float fY, float fZ)
{
    fPitch += fX;
    fYaw   += fY;
    fRoll  += fZ;
}

Hier die Update Funktion
Quellcode:
void CENGINE_Camera::ENGINE_Update()
{
    float fSinYaw   = sinf(fYaw),
          fCosYaw   = cosf(fYaw);
    float fSinPitch = sinf(fPitch),
          fCosPitch = cosf(fPitch);
    float fSinRoll  = sinf(fRoll),
          fCosRoll  = cosf(fRoll);

    vRight.x    = fCosYaw  * fCosRoll + fSinYaw * fSinPitch * fSinRoll;
    vRight.y    = fSinRoll * fCosPitch;
    vRight.z    = fCosYaw  * fSinPitch * fSinRoll - fSinYaw * fCosRoll;

    vUp.x        = fSinYaw * fSinPitch * fCosRoll - fCosYaw * fSinRoll;
    vUp.y        = fCosRoll * fCosPitch;
    vUp.z        = fSinRoll * fSinYaw + fCosRoll * fCosYaw * fSinPitch;

    vDir.x        = fCosPitch * fSinYaw;
    vDir.y        = -fSinPitch;
    vDir.z        = fCosPitch * fCosYaw;

    matView._11 = vRight.x;
    matView._21 = vRight.y;
    matView._31 = vRight.z;
    matView._41 = -vPos.ENGINE_DotProduct(vPos, vRight);
    matView._12 = vUp.x;
    matView._22 = vUp.y;
    matView._32 = vUp.z;
    matView._42 = -vPos.ENGINE_DotProduct(vPos, vUp);
    matView._13 = vDir.x;
    matView._23 = vDir.y;
    matView._33 = vDir.z;
    matView._43 = -vPos.ENGINE_DotProduct(vPos, vDir);
    matView._14 = 0.0f;
    matView._24 = 0.0f;
    matView._34 = 0.0f;
    matView._44 = 1.0f;

    glLoadMatrixf (matView.mA);  
}

--

zum Seitenanfang zum Seitenende Profil || Suche
010
26.07.2002, 23:34
TheTinySteini



Ok, die Rotate-Funktion is so in Ordnung. Lass dir am besten mal ausgeben (hast du ne Debugging-Funktion? Zur Not lass es in ne Datei schreiben), welche Werte von GetCursorPos und so zurückgegeben werden und welche Werte du an Rotate übergibst.

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche
011
27.07.2002, 12:37
Gnomo



Von GetCursorPos wird für x 512 und für y 384. Das ist es ja. So kommt null raus und nix passiert.

--

zum Seitenanfang zum Seitenende Profil || Suche
012
16.08.2002, 18:03
[RMen]OneStone



Toll TTT, hast du was anderes geposted als ich? =)

--

georg-wicherski@pixel-house.net | http://www.pixel-house.net/ - Coding Resource| http://www.google.de/

zum Seitenanfang zum Seitenende Profil || Suche
013
18.08.2002, 17:15
TheTinySteini



Uhm... nein, aber hast du ja früh gemerkt ;-)
Nur hilft ihm das wohl mit seinem Problem nicht weiter, falls er's überhaupt noch hat.

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche
014
18.08.2002, 17:17
[RMen]OneStone



Ich persönlich vermute, fPitch etc. werden Resetted, und deshalb geht es nicht.

--

georg-wicherski@pixel-house.net | http://www.pixel-house.net/ - Coding Resource| http://www.google.de/

zum Seitenanfang zum Seitenende Profil || Suche
015
18.08.2002, 20:46
Gnomo



Nein ich habe das Problem net mehr. Aber trotzdem danke. ;)

--

zum Seitenanfang zum Seitenende Profil || Suche