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

ArthurII

Treue Seele

  • »ArthurII« ist der Autor dieses Themas

Beiträge: 132

Wohnort: Aachen

Beruf: Student

  • Private Nachricht senden

1

12.05.2010, 18:47

Kollision mit Richtung

Ich habe diese Woche bei meinem Ferienjob Nachtschicht und daher viel Zeit zum nachdenken. und da habe ich mich gefragt:

Wenn ich bei einem normalen 3D-Spiel vor eine Wand laufe, dann bleibe ich ja nicht unbedingt zu 100% stehen. Also wenn ich z.B. im 45° Winkel davor renne, läuft er langsamer und entsprechend der Oberflächenrichtung weiter.
Wie realisiere ich so was?

Derzeit läuft meine Bewegungskontrolle so ab:
  1. Tastendruckabfrage
  2. entsprechend der Taste laufen
  3. liegt Kollision vor?
    • nein -> alles kann so bleiben
    • ja ->zurücksetzen
Die Kollisionsabfrage läuft dabei im ersten schritt über einen umschließenden Würfel und im zweiten über eine schleife, die für jeden Punkt des einen Körpers checkt ob er hinter den Ebenen des anderen liegt [if (Punkt * n < Ebenenpunkt * n)]. Wenn einer oder mehrere Punkte hinter allen ebenen liegen/t, habe ich Kollision.
Ist der Ansatz korrekt und nur zu erweitern oder muss ich die Sache ganz anders angehen?
Ich bin nicht verrückt - nur verhaltensoriginell!
Project-Seite: Aura

Oberon

Treue Seele

Beiträge: 181

Wohnort: Österreich

Beruf: Student

  • Private Nachricht senden

2

12.05.2010, 19:06

Vielleicht nicht "Liegt eine Kollision vor", sondern "Liegt eine Kollision auf der x/y/z-Achse vor" fragen, also alle Achsen gesondert behandeln.

3

12.05.2010, 19:07

Den Ansatz kannst du behalten. Du könntest nun einfach die Position nehmen, die du hinter dem Obekt hättest. Dann nimmst du das Dreieck, mit dem Du kollidierst, und ziehst eine senkreche zum Dreieck zum Punkt, wo du eigentlich wärst.


(Link)


Der blaue Kreis ist deine vorherige Position, der Grüne Kreis deine Position die du danach egientlich hättest. Der rote Strich ist das Dreieck mit dem du kollidierst. Der Schwarze Strich zeigt den Weg den du von einer Frame zu nächsten machst, und der braune strich ist die Senkrechte zum Dreieck.

Verstehst du was ich meine?

C-/C++-Quelltext

1
2
3
4
while(true)
{
    printf("Schon wieder aufgehangen!?");
}

4

12.05.2010, 19:10

Hier gibts ein paar nette Artikel zum Thema.
(etwas runterscrollen auf der Seite)
fka tm

5

12.05.2010, 23:58

Macht genau das, was du willst, und das gut erklärt:

http://www.peroxide.dk/papers/collision/collision.pdf
Lieber dumm fragen, als dumm bleiben!

ArthurII

Treue Seele

  • »ArthurII« ist der Autor dieses Themas

Beiträge: 132

Wohnort: Aachen

Beruf: Student

  • Private Nachricht senden

6

13.05.2010, 16:26

ich denke ich werde mir über den Ansatz von potatoman mal ein paar Gedanken machen. Das sah mir sehr realisierbar und verständlich aus...

thx
Ich bin nicht verrückt - nur verhaltensoriginell!
Project-Seite: Aura

Werbeanzeige