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

dx11

unregistriert

1

24.09.2011, 10:08

Treppen

Hey Hey Guten Morgen
Ich hätte mal eine Frage:
Ich habe eine "FirstPerson" Kamera und möchte damit treppen hoch und runter gehen können.
Mein Ansatzt war irgendwie den abstand von Kamera zu Boden herausfinden. Nur wie?
WIe lauft ihr "virtuelle" Treppen mit einer Kamera?
Danke

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

2

24.09.2011, 11:17

In den meisten Shooter wird die höhe der Kamera einfach um die Höhe des darunterliegenden Terrains erhöht. Bei richtig neuen Shootern (z.B. Battlefield 3) werden Treppen auch "gelaufen" anstatt das die Kamera einfach nur wie ein Fahrstuhl hoch fährt. Das erste ist aber einfacher und reicht vollkommen, wer Spaß hat kann das natürlich auch verbessern.

Und Abstand zum Boden herausfinden: es gibt doch sone Technik bei der man einen Strahl in irgendeine Richtung "schießt" und guckt mit welcher Fläche sie kollidiert. Von der Fläche nimmst du dann alle Ecken und bastelst dir darauß die Durchschnittshöhe (ray-casting?). Jetzt frag mich aber nicht wie das genau geht, ich kann kein Mathe ^^

Moe

Frischling

Beiträge: 85

Wohnort: München

  • Private Nachricht senden

3

24.09.2011, 13:59

Also Du brauchst die Position deiner Kamera und einen Richtungsvektor. Die Kameraposition p weißt du ja. Der Richtungsvektor ist r = (0, -1, 0) unter der Annahme, das y bei dir die Achse nach oben/unten ist. Dann ist deine Geradengleichung
x = p + a * r
mit a eine skalare Konstante. Damit kannst Du jetzt eine beliebige Geometrie schneiden, oder Schrittweise laufen, bis Du von oberhalb deines Meshes zu unterhalb wechselst. Dann weißt Du, dass zwischen den letzten beiden Punkten der Boden gewesen sein muss.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

24.09.2011, 16:06

Eigentlich ist die Frage nach der Berechnung irgendwie unnötig. Denn der Spieler hat ja irgendwie eine Position, genau wie die Kamera. Wenn er schon weiß wo sein Spieler ist, dann ist die Kamera einfach nur relativ dazu positioniert. Wenn es hier generell darum geht rauszubekommen, wo ein Spieler in einer Spielwelt überhaupt stehen kann, dann ist ja noch einiges zu tun... und Raycasting ist da nicht unbedingt eine performante Idee...
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

dx11

unregistriert

5

24.09.2011, 18:41

@BlueCobold
Was ist sonst noch eine Lösung? ich habe ja garkein Spieler sondern nur eine Kamera die als Spieler dient.
Von der Kamera weiß ich eigentlich alles: Position, Blickrichtung, Winkel.
Was ist denn nun eine Gute methode?
Ich habe mir eine sehr schlechte Lösung ausgedacht: Ich mache eine Datei wo jede Position mit Höhe angegeben ist und eine Variable die immer die Aktuelle höhe besitzt.
Nun prüfe ich immer die Differenz zwischen Kamera soll und istwert. Allerdings ist das, wie schon gesagt, eine schlechte Lösung bei riesigen Levels.
Danke

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

6

24.09.2011, 23:40

Also wenn du das Terrain aus einer highmap baust kannst du ja damit arbeiten...
Es kommt halt auch drauf an wie du dein Terrain (Treppe) speicherst, nur die Vertices mit dem was dazu gehört oder eben auch highmap/whatever?

dx11

unregistriert

7

25.09.2011, 11:31

Eigentlich wollte ich nichts Speichern in eine HightMap.
Einfach nur Treppen^^
Ok ich weiß das ist schwer nur irgendwie muss man doch den Abstand zum Boden bekommen oder? Jett außer RayCast
Danke

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

25.09.2011, 11:34

Dann definiert mal, was in deinem Spiel genau ein "Boden" ist. Was für eine Art Spiel ist das? Wie wird deine Map repräsentiert?

dx11

unregistriert

9

25.09.2011, 11:36

Hm ja ein Boden...
Halt eben wenn man runter guckt waas man als erstes sieht. Und wenn man auf Treppen ist das wird sich der Boden erhöhen oder ertiefen jenachdem in welche richtung man die Treppen geht.
Danke

10

25.09.2011, 11:37

Du kannst jetzt natürlich einfach nur das Problem mit den Treppen lösen, z.B. durch Raycasting, oder du beschäftigst dich gleichzeitig schonmal mit zukünftigen Problemen, z.B. das der Spieler nicht in Wände oder Steine, etc hineinläuft, denn einfach nur bei Treppen wirst du wohl nicht sehr lange bleiben.
Die performanteste und einfachste Methode für dich ist eine vorhandene Physikengine z.B. Bullet zu integrieren. Dann hast du diese Probleme und viele weitere schonmal gelöst. Wenn du das ganze selbst programmieren willst kannst du dir ja mal anschauen, wie die gängigen Physikengines das gelöst haben.

Werbeanzeige

Ähnliche Themen