Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

1

21.10.2011, 17:59

Komische werte der Kamera

Hallo
Mein Problem besteht darin das meine Kamera immer in irgendeine Rcihtung zeigt obwohl ich sie ganz nocrmal setzte.
Ich habe folgenden Code um die Masubewegung auf die Kamera zu übertragen:

C-/C++-Quelltext

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
34
35
36
37
38
39
40
void CamSteering::Calculate( float fNumSecsPassed, float MouseSensitive, float &OutputX, float &OutputY )
{
    GetCursorPos( &ptMousePosition );

    if( m_iUp == 0 )
    {
        ptMousePositionOld.x = 0;
        ptMousePositionOld.y = 0;
        m_iUp ++;
    }

    ptMousePositionDiffrent.x = (ptMousePosition.x - ptMousePositionOld.x);
    ptMousePositionDiffrent.y = (ptMousePosition.y - ptMousePositionOld.y);
    
    OutputX += ptMousePositionDiffrent.x * 0.1f  * fNumSecsPassed;
    OutputY += -(ptMousePositionDiffrent.y * 0.1f * fNumSecsPassed);

    // Maus in die Mitte setzten
    // Variable zum Specihern der Auflösung
    float cxScreen, cyScreen;
    // Auflösung sualesen
    cxScreen = ( float ) GetSystemMetrics(SM_CXSCREEN);
    cyScreen = ( float ) GetSystemMetrics(SM_CYSCREEN); 

    // Mitte ausrechnen
    ptCenter.x = ( LONG ) cxScreen / 2.0f ;
    ptCenter.y = ( LONG ) cyScreen / 2.0f ;

    // Cursor Position auf Mitte setzten
    SetCursorPos( ptCenter.x , ptCenter.y );

    ptMousePositionOld = ptCenter;

    // Zuzücksetzten falls nötig
    /*if( m_iUp == 111 )
    {
        OutputX = 0;
        OutputY = 0;
    }*/
}

In meiner Reder funktio steht Render^^ und dann Setup Cam. Setup Cam Funktion:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// Kamera Schwenken
    Cam.Calculate(fTime, 0, m_fCameraAngleX, m_fCameraAngleY ); // Funktion von vorher

    // Prüfen wenn kamera oben oder unten anschlägt
    if( m_fCameraAngleY >= DEG_TO_RAD(88.0f) )
    {
        m_fCameraAngleY = DEG_TO_RAD(88.0f);
    }
    else if( m_fCameraAngleY <= DEG_TO_RAD(-88.0f) )
    {
        m_fCameraAngleY = DEG_TO_RAD(-88.0f);
    }

    // Blickrichtung ausrechnen
    m_vCameraDir = Vector3( sinf(m_fCameraAngleX) * cosf(m_fCameraAngleY), m_fCameraAngleY, cosf(m_fCameraAngleX) * cosf(m_fCameraAngleY) );

    // Kamera Bewegen ( links, rechts, vorne, hinten )
    if( GetAsyncKeyState(VK_UP) || GetAsyncKeyState('W') )      m_vCameraPos += m_vCameraDir * m_fCamSpeed * fTime;
    if( GetAsyncKeyState(VK_DOWN) || GetAsyncKeyState('S') )    m_vCameraPos -= m_vCameraDir * m_fCamSpeed * fTime;

Nun zur überprüfung der Wert habe ich als erstes in der Render funktion eine funktion die mir die psoition xyz und blickrichtung xyz von der Kamera in eine Datei schreibt.
Das sieht so aus:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
0
10
0
0
0
0
--------------------------------Render durchgang 1
0
10
0
-0.016997
-1.53589
0.0304808
--------------------------------Render durchgang 2
0
10
0
-0.016997
-1.53589
0.0304808
--------------------------------Render durchgang 3

Die Rheinfolge ist: Position x y z und dann Blickrichtung x y z
WIe man sieht ändern sich die Werte ohen das ich was mache! Warum ist nun meine Frage. Und vorallem wie löst man das Problem? Stimmt was an der Rechnung nicht? Ich finde jdenfalls kein Fehler^^
Danke ;)
PS Alle werte in Bogenmaß desegen so klein :D

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

2

21.10.2011, 22:24

Gelöst^^
War ein Fehler bei der Initialiesierung.
Ein mod kann gerne schließen :D
MfG

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

Ähnliche Themen