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