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

1

07.10.2009, 20:37

Sich über einen Boden bewegen

Folgende Situation:
Ich habe ein Programm, welches aus einem .x-File (das einen welligen Boden darstellen soll) und einer (in xz-Ebene beweglichen) Kamera besteht.

Meine Frage:
Wie schaffe ich es, bzw. welche Methoden gibt es, dass die Kamera sich in der y-Ebene immer im gleichen Abstand zu meinen Boden befindet?

2

07.10.2009, 20:49

Du kannst die Y-Werte der Vertices im Buffer des Meshes gegen die der Kameraposition prüfen.
An den Buffer kommst du mit mesh->GetVertexBuffer.

3

07.10.2009, 21:09

ok, danke für die schnelle antwort.

i schätze mal an den buffer komme i so

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    LPD3DXMESH g_pSphere = NULL;        // Bodenmodell


        if(FAILED(hResult = D3DXLoadMeshFromX("Ground.x",
                                          D3DXMESH_MANAGED,
                                          g_pD3DDevice,
                                          NULL,
                                          NULL,
                                          NULL,
                                          NULL,
                                          &g_pSphere)))
        {
            //...

        }
// ..........   


    LPDIRECT3DVERTEXBUFFER9 a;
    g_pSphere->GetVertexBuffer(&a);


Was mache ich nach der letzten zeile?

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

4

07.10.2009, 21:32

Du solltest den Buffer speichern (in einer Klasse) und dann kannst du beim updaten die Y- Werte überprüfen und deine Kamera plus das Offset setzen.

5

07.10.2009, 21:40

& wie genau speichere ich den Buffer eines .x-Files (in eine Klasse)?

6

07.10.2009, 21:43

Grobe Vorgehensweise:

Mesh laden
- Mesh in Systemmem laden
- Vertexbuffer holen
- Vertexbuffer lock
- Schleife: Hole die Positionsvektoren (siehe 1)
- Speicher die in einem Array oder std::vector ab
- Vertexbuffer unlock
- Optional: CloneMesh -> D3DXMESH_MANAGED

Gameloop:
- Suche Y in Array anhand gegebener Kameraposition X und Z
(eigene Funktion á la "float GetCurrentY(x, z)" schreiben)
- Kamerahöhe setzen: Mesh.Y + Offset


1. Um an die Positionsvektoren zu gelangen, brauchst du das Vertexformat.
Entweder kennst du es, z.B. durch Analyse der X-Datei,
oder du kennst es nicht und musst es via mesh->GetDeclaration ermitteln.

Werbeanzeige