Bewegung auf einer Stiege



  • Wie kann ich mich auf einer Stiege (bzw. auf einer schrägen Ebene) auf und ab bewegen? Funktioniert das mit Polygonerfassung und Bestimmung der y-Position der Kamera, oder gibt es da bessere Ansätze?

    Wenn mir jemand etwas Pseudocode posten könnte, wäre ich sehr dankbar.



  • Könntest du dein Problem was mehr erläutern ? Was möchtest du genau machen ?

    /ot :
    Österreicher 🙂 ?



  • Vermutlich will er wissen, wie er die Kamera-Position passend zur Boden-Struktur ändert. Wenn unter ihm eine schräge ist und sich die Kamera darauf bewegt soll sich die Höhe ändern, so wie in einem 3D Shooter wenn der Spieler eine Steigung hoch läuft. Ich hab auch schon oft überlegt wie man das realisieren könnte... Wenn man die Szenerie in einem BSP-Tree rendert weiss man ja immer mehr oder weniger über welchen Polygonen man sich befindet. Man müsste dann noch rausfinden in welche Richtung das Polygon abfällt oder die Steigung zunimmt.



  • hallo zusammen,

    wie man es genau macht weis ich nicht da ich meine punkt nur so ungefähr berechne.

    aber probiers es mal hier mit, dort wird es zeimlich genau gemacht
    [url] http://nehe.gamedev.net/downloads/downloads/greatengine.zip [/url]

    [ Dieser Beitrag wurde am 24.01.2003 um 14:45 Uhr von miller_m editiert. ]



  • @ Cpp Junky

    Exakt, ich müsste die Neigung des Polygons bestimmen können auf dem ich mich gerade befinde, und dann die Kameraposition entsprechend daran anpassen.



  • Verwendest du BSP oder findet das ganze auf einem generierten Terrain (mit der Height-Map des Terrains wäre es leicht zu realisieren) statt ?



  • @ Cpp Junky

    Ich verwende ein Mesh, allerdings ohne BSP.



  • Und wie ist dieses Mesh organisiert ? Als Vertex-List ?



  • @ Cpp Junky

    Es ist ein Mesh vom Typ LPD3DXMESH*. Die Polygonliste ist in Vertex - und Indexbuffer organisiert.



  • Ich würde es so machen: eine virtuelle Linie vom Kopf bis zum Fuß des Spielers ziehen und prüfen, ob sie den Level schneidet. Wenn ja: Spieler nach oben schieben. Man merkt sich einfach den nächsten Schnittpunkt zwischen Linie und Level und weiß dann sofort, um wie viele Einheiten man den Spieler exakt nach oben schieben muss.
    Läuft man abwärts, dann braucht man sich darum nicht zu kümmern, weil das ja schon durch die Gravitation automatisch gemacht wird.



  • @ TomasRiker

    So ähnlich habe ich es am Anfang gemacht. Das Problem ist, das dabei der Spieler bei jeder Kollision nach oben bewegt wird, und nicht nur bei Kollisionen auf der Stiege. Ich bräuchte einen Algo der nur auf einer Stiege funktioniert, und bei Kollisionen mit anderen Objekten des Levels die Höhe des Spielers nicht verändert.



  • Dann markierst Du halt diese Polygone irgendwie, z.B. durch eine BOOL-Variable:

    struct SPolygon
    {
        DWORD dwVertex[3];
        DWORD dwMaterialID;
        BOOL  bDiesesPolygonIstTeilEinerStiege;
    };
    

    😃 Dann hast Du nachher bei der Kollisionserkennung auch weniger zu tun.

    EDIT: Achso, Du benutzt ID3DXMesh... dann würde ich es so machen, dass man definiert: Material 1 ist ein "Stiegen-Material". Und dann prüfst Du vor der Kollisionerkennung, ob das Polygon ein solches Material hat. Wenn nicht, brauchst Du nicht zu prüfen.

    [ Dieser Beitrag wurde am 25.01.2003 um 08:59 Uhr von TomasRiker editiert. ]



  • Na ihr machts euch ja kompliziert ...
    Das erledigt man normalerweise gleich mit der Kollisionserkennung. Indem man den Slide-Vector ermittelt ...
    Hier mein absolutes Lieblingstutorial darüber ... http://www.peroxide.dk/download/tutorials/tut10/pxdtut10.html


Anmelden zum Antworten