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

Jack Raynor

Treue Seele

  • »Jack Raynor« ist der Autor dieses Themas

Beiträge: 111

Wohnort: Korprulu Sektor BR-5-Tarsonis

Beruf: Schüler

  • Private Nachricht senden

1

23.04.2004, 18:43

Kamera auf Position des Spielers setzen

Hi,
ich hab für mein Spiel jetzt `ne Cam-class geschrieben und die Position so gesetzt das sie die Position der Klasse einnimmt die auch das Spielermodell beinhaltet. Wenn ich die Position allerdings anzeige, so ist die Position der Kamera immer doppelt so groß wie die des Spielers obwohl ich keine solche Anweisung finden kann! Wisst ihr was da falsch sein könnte?

Jack
Was wäre wenn in jedem von uns ein Held stecken würde? Was wäre wenn jeder von uns als Held geboren wäre? Hättest du den Mut Held zu werden?
Legenden des Tassadar, Kapitel 3, Absatz 5

Starcraft - Battle of Races

Anonymous

unregistriert

2

24.04.2004, 00:21

Auch hier gilt: wir sehen deinen Bildschirm nicht, daher bitte etwas genau. Was meinst du mit z.B. doppel so groß? Meinst du das die Positionkordinate mal 2 genohmen wird, also doppelt soweit vom Kooridnatenursprung entfernt ist?

Jack Raynor

Treue Seele

  • »Jack Raynor« ist der Autor dieses Themas

Beiträge: 111

Wohnort: Korprulu Sektor BR-5-Tarsonis

Beruf: Schüler

  • Private Nachricht senden

3

24.04.2004, 09:10

Nicht ganz. Wenn ich den Player bewege, soll sich die Kamera ja eigentlich genau gleich mit bewegen, das tut sie aber nicht! Wenn der Spieler die Pos. 10, 0, 20 hat so ist die Kamera bei 20, 0, 40. Ich kann ja mal die Move Funktion des Players und die Setup-Funk der Kamera reinsetzen.
Spieler:

Quellcode

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
41
//************************************************************
// Fragt Steuerung ab
bsResult cGamePlayer::Control(float fTime)
{
    m_vSpeed = bsVec3(0.0f);                            // den Geschwindigkeitsvektor auf 0 setzen
    m_vDirection = bsVec3(0.0f);                        // den Rotationsvektor auf 0 setzen

    m_vSpeed.x -= 5000 * g_pfButtons[BS_KEY_A] * fTime; // nach links strafen
    m_vSpeed.x += 5000 * g_pfButtons[BS_KEY_D] * fTime; // nach rechts strafen
    m_vSpeed.z += 5000 * g_pfButtons[BS_KEY_W] * fTime; // Vorwärts
    m_vSpeed.z -= 5000 * g_pfButtons[BS_KEY_S] * fTime; // Rückwärts
    
    m_vDirection.x += 50000 * (g_pfButtons[BS_MOUSE_Y_POS] - g_pfButtons[BS_MOUSE_Y_NEG]) * fTime;
    m_vDirection.y += 50000 * (g_pfButtons[BS_MOUSE_X_POS] - g_pfButtons[BS_MOUSE_X_NEG]) * fTime;

    return BS_OK;
}

//************************************************************
// bewegt das Modell
bsResult cGamePlayer::MovePlayer(float fTime)
{
    Control(fTime); // Schiff steuern lassen

    // Werte Begrenzen
    if(m_vSpeed.x > 5000.0f)m_vSpeed.x = 5000.0f;
    if(m_vSpeed.x < -5000.0f)m_vSpeed.x = -5000.0f;
    if(m_vSpeed.z > 5000.0f)m_vSpeed.z = 5000.0f;
    if(m_vSpeed.z < -5000.0f)m_vSpeed.z = -5000.0f;
    if(m_vDirection.y > 5000.0f) m_vDirection.y = 5000.0f;
    if(m_vDirection.y < -5000.0f) m_vDirection.y = -5000.0f;
    if(m_vDirection.x > 5000.0f) m_vDirection.x = 5000.0f;
    if(m_vDirection.x < -5000.0f) m_vDirection.x = -5000.0f;

    TranslateRel(bsVec3(m_vSpeed.x * fTime, 0.0f, m_vSpeed.z * fTime)); // Bewegung setzen
    SetRotation(m_vDirection * fTime);              // Richtung setzen

    Move(fTime);    // bewegen (bsObject)   

    return BS_OK;
}


Kamera:

Quellcode

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
// __________________________________________________________________
// Setzt die Kamera
bsResult cCam::SetCam()
{
    bsMatrix        mCamera;
    bsMatrix        mProjection;
    bsVec3          vDirToTarget;

    // Position, Blickpunkt, Nach-Oben-Vektor und Blickfeld setzen
    /*switch(m_eCamMode)
    {
    case SC_EGO:*/
        // Ego-Perspektive (Jack Raynor, Geschütztürme)
        m_vCameraPos = g_pSC_BR->m_pSkirmish->m_pPlayer->RelToAbsPos(g_pSC_BR->m_pSkirmish->m_pPlayer->m_vPosition);
        m_vCameraLookAt = m_vCameraPos + g_pSC_BR->m_pSkirmish->m_pPlayer->m_vZAxis;
        m_vCameraUp = g_pSC_BR->m_pSkirmish->m_pPlayer->m_vYAxis;
        m_fFOV = BS_DEG_TO_RAD(70.0f);
        //break;
    //}

    // Kameramatrix erstellen und einsetzen
    mCamera = bsMatrixCamera(m_vCameraPos, m_vCameraLookAt, m_vCameraUp);
    bsDirect3D::SetTransform(D3DTS_VIEW, mCamera);

    // Projektionsmatrix erstellen und einsetzen
    mProjection = bsMatrixProjection(m_fFOV, bsDirect3D::GetAspect(), 5.0f, 20000.0f);
    bsDirect3D::SetTransform(D3DTS_PROJECTION, mProjection);

    // View-Frustum berechnen
    bsComputeClipPlanes(mCamera, mProjection, m_aViewFrustum);

    // DirectSound-Hörer setzen
    bsDirectSound::SetListener(m_vCameraPos,
                               bsVec3(mCamera.m12, mCamera.m22, mCamera.m32),
                               bsVec3(mCamera.m13, mCamera.m23, mCamera.m33),
                               1.0f);

    return BS_OK;
}


Hofentlich hilft euch das!

Jack
Was wäre wenn in jedem von uns ein Held stecken würde? Was wäre wenn jeder von uns als Held geboren wäre? Hättest du den Mut Held zu werden?
Legenden des Tassadar, Kapitel 3, Absatz 5

Starcraft - Battle of Races

Anonymous

unregistriert

4

24.04.2004, 12:35

an iss doch klar

Zitat von »"Jack Raynor"«

Wenn der Spieler die Pos. 10, 0, 20 hat so ist die Kamera bei 20, 0, 40.

Quellcode

1
2
3
4
5
....
    case SC_EGO:*/
        // Ego-Perspektive (Jack Raynor, Geschütztürme)
        m_vCameraPos = g_pSC_BR->m_pSkirmish->m_pPlayer->RelToAbsPos(g_pSC_BR->m_pSkirmish->m_pPlayer->m_vPosition);
...


Du berechnest hiermit eine Relative Position, ausgehend vom Spieler.
Allerdings nimmst Du wieder die ABSOLUTEN Spielerkoordinaten und deswegen ist Deine Kamera immer absolut soweit vom Spieler weg, wie dieser absolut vom Nullpunkt entfernt ist.....

es müsste richtig heißen

Quellcode

1
m_vCamPos = g_pSC_BR->m_pSkirmish->m_pPlayer->m_vPosition;


oder halt sowas :

Quellcode

1
m_vCameraPos = g_pSC_BR->m_pSkirmish->m_pPlayer->RelToAbsPos(tbVector3(0.0f, 5.0f, -5.0f));

Jack Raynor

Treue Seele

  • »Jack Raynor« ist der Autor dieses Themas

Beiträge: 111

Wohnort: Korprulu Sektor BR-5-Tarsonis

Beruf: Schüler

  • Private Nachricht senden

5

24.04.2004, 13:59

Hey danke! Jetzt funzt es endlich richtig ;D ! :huhu:
Was wäre wenn in jedem von uns ein Held stecken würde? Was wäre wenn jeder von uns als Held geboren wäre? Hättest du den Mut Held zu werden?
Legenden des Tassadar, Kapitel 3, Absatz 5

Starcraft - Battle of Races

Werbeanzeige