Polygonkollisionserkennung

Posted By: XPress

Polygonkollisionserkennung - 03/02/07 14:10

Hey Leute,

Also folgendes Problem ergibt sich mir...

Ich habe ein Moddel mithilfe von FBX aus einem anderen Grafikprogramm in 3DGs geladen...es wird alles ganz gut dargestellt...allerding möchte ich gerne das man genau mit den Polygonen kollidiert und nicht mit dem Moddelrahmen von 3DGs...also um sich genau vorzustellen,
ich habe ein Haus gebaut und ich möchte gerne in diesem Haus herraumlaufen können und nicht durch die Wände gehen

Kann mir wer erklären wie ich das alles mache? Also laut Description geht das ja mit 3DGs oder hab ich das Falsch verstanden was da stand?

mfg X-Press
Posted By: Puppeteer

Re: Polygonkollisionserkennung - 03/02/07 14:15

klar geht das
Hast du denn schon gescripted??

Posted By: Slin

Re: Polygonkollisionserkennung - 03/02/07 14:15

Welche 3dgs Version benutzt du?
Wenn du mindestens A6.31.4 Standart besitzt, kannst du dem Modell einfach diese Funktion geben:

action poly_mdl
{
my.fat = off;
my.narrow = off;
my.polygon = on;
}

oder im WED einfach den Polygon-Flag aktivieren bei den entity properties
Posted By: Puppeteer

Re: Polygonkollisionserkennung - 03/02/07 14:17

Ich glaub er macht noch walkthroughs
Posted By: XPress

Re: Polygonkollisionserkennung - 03/02/07 14:21

@derOmega: Ich fange gerade an mich damit zu beschäftigen...da ich zuzeit mehr für das Arbeiten in andere Programmen zuständig bin...also fange ich gerade mitm Script an

Also das mit der Flag hab ich probiert...allerdings hat es nicht funktioniert...sind besondere Funktionen im Bewegungsscript erforderlich?
Posted By: Robotronic

Re: Polygonkollisionserkennung - 03/02/07 16:05

Hi!
Hab vor ner Weile auch mal so ein begehbares Haus als Modell gebastelt und in den neueren Versionen kann man da auch tatsächlich hineingehen.
Wie bereits erwähnt, muß man beim Haus-Modell das polygon Flag setzen.
Beim Player Modell und auch bei der Kamera verwende ich die OBB-Kollisionserkennung. Verwende also nur c_move, c_trace. Bei Verwendung von trace (im Kamera code) gabs bei mir Probleme, mit c_trace hat es dann geklappt.
Posted By: XPress

Re: Polygonkollisionserkennung - 03/02/07 22:09

Hm...wo bekomme ich denn c_move und so her */set n00b on myself*
Denn ich würde das gerne mit kollision machen und net mit blöcken in den Wänden
Posted By: Robotronic

Re: Polygonkollisionserkennung - 03/02/07 23:34

Also entweder verwendest du Templates, da gibt es dann z.B. so eine Aktion namens plbibed01, oder so ähnlich, die bereits c_move usw. verwendet, oder du scriptest deine eigene Player Action. Ich kenne mich mit den Templates leider gar nicht gut aus. Wenn du selber scripten willst, würde ich dir zum Einstieg den c-Script workshop empfehlen (gibt´s auf der Downloadseite).
Man kann dir sicher besser helfen, wenn man wüßte, welche Version du hast und ob du die Templates verwenden willst oder nicht ...
Posted By: XPress

Re: Polygonkollisionserkennung - 03/03/07 00:11

Ich habe 6.50
Und für den Anfang würde mir erstmal nur ein Playerscript reichen...naja und irgendwas womit ich active light machen kann...aber da beschäftige ich mich nochma mit...also für den Anfang wäre ein Playerscript mit c_move gut
Posted By: Robotronic

Re: Polygonkollisionserkennung - 03/03/07 00:59

Wirf mal eine Blick ins AUM, da finden sich jede Menge Player Scripts in unterschiedlich komplexen Ausführungen. Du wirst natürlich auch ein Kamerascript brauchen. Ein sehr einfaches und einigermaßen aktuelles Beispiel findet sich zum Beispiel in AUM 52 (c_trace workshop). AUM 53 enthält alle möglichen Kamera codes.
Die Beispiele im AUM sind simpel gehalten, eignen sich aber gut als Basis. Für eine gute Kollisionserkennung mußt du eventuell noch die Playeraction ergänzen, indem du die Bounding Box exakt auf die Maße des verwendeten Modells einstellst, z.B. mit c_setminmax (siehe Manual).
Posted By: TTKJonas

Re: Polygonkollisionserkennung - 03/03/07 14:07

Hi

xpress und ich arbeiten zusammen an dem gleichen Problem

Die wohl entscheidene Zeile für Spielerbewegung sieht so aus:

c_move(me,nullvector,my.move_x, ignore_passable | glide | activate_trigger);

Die Polygongenaue Kollisionserkennung funktioniert nun ansatzweise, allerdings mit einem kleinen Fehler^^
Wenn man mit der Spielfigur durch einen Torbogen (Komplett als eine mdl Datei) läuft, wird die Spielfigur beim Durchlaufen nach oben gezogen. Am Rahmen des Torbogens bleibt man hängen(so soll es ja sein) und in der Mitte kann man hindurchlaufen. Also eigentlich funktioniert es.
Aber wie entsteht dieser Fehler?

Gruß
Jonas
Posted By: Robotronic

Re: Polygonkollisionserkennung - 03/03/07 16:21

Ich hatte mal so einen ähnlichen Fehler. An bestimmten Stellen ist das Spielermodell plötzlich vertikal nach oben geschwebt.
Verwendet ihr eventuell unsichtbare Levelgeometrie? Ich glaube, bei mir hing es damit zusammen. Ich hatte passable Baummodelle und wollte für die Kollisionserkennung (und Schatten) unsichtbare (Textur auf none gesetzt) WED Blöcke verwenden. Im Prinzip sollte das auch gehen, aber irgendwas ist da anscheinend schief gelaufen. Entfernen der Blöcke mit anschließendem neubuilden hat geholfen. Aber so richtig durchschaut hab ich´s auch nicht ...
Posted By: XPress

Re: Polygonkollisionserkennung - 03/04/07 15:41

Also er geht immer sobald man im Moddeleinzugberreich ist nach oben (kolliediert aber trotzdem nur nicht mit den Deckenflächen)...und unsichtbare Blöcke haben wir nicht....jemand ne Idee?
Posted By: XPress

Re: Polygonkollisionserkennung - 03/07/07 17:11

*push*
Posted By: Robotronic

Re: Polygonkollisionserkennung - 03/07/07 23:59

Ihr solltet sicherstellen, daß sich sowohl in der Playeraction, als auch im Kameracode keine trace-Anweisungen befinden, bzw. diese durch c_trace ersetzen. Ich erinnere mich jedenfalls dunkel, daß mein Player erst dann in seinem Hausmodell herumlaufen konnte, nachdem ich alles durch c_trace ersetzt hatte.

Postet im Zweifelsfall mal den Code.

Ansonsten eventuell das Torbogen-Modell mal aus dem Level entfernen, speichern, neu builden und dann das Modell nochmal laden und Polygon Flag setzen.
Keine Ahnung, ob´s was hilft ...
Posted By: TTKJonas

Re: Polygonkollisionserkennung - 03/10/07 11:10

@Robotronic

Schonmal vielen Dank für den Hinweis!
Das hat bereits sehr geholfen und Kollision funktioniert jetzt!

Allerdings gibt es ein neues Problem.
Die Kollision der Spielfigur zu Blöcken funktioniert nicht mehr richtig und sinkt immer bis zum Nullpunkt in den Boden ein.
Das Script, das den Fehler verursacht sieht so aus:

FUNCTION handle_gravity()
{
trace_mode = ignore_me+ignore_passable+activate_trigger+use_aabb;
result = c_trace(vector(my.x,my.y,my.z - my.z_offset),vector(my.x,my.y,my.z - 4000),nullvector);
...

Ich hab schon mit den verschiedenen "mode" Flags herumprobiert, aber der Spieler ist entweder in den Boden gesunken, oder richtung Himmel geschwebt.

Um das Level befindet sich ein ausgehüllter Block mit dem "Sky" Flag

Hat jemand eine Idee?

Gruß
Jonas
Posted By: Robotronic

Re: Polygonkollisionserkennung - 03/10/07 11:37

Wenn du c_trace verwendest, mußt du den trace mode nicht mehr separat setzen.
Er ist jetzt ein Parameter der c_trace Funktion.
Die allgemeine Form sieht so aus:

c_trace(VECTOR* from, VECTOR* to, var mode)

Die "Schwerkraft" sollte so ähnlich funktionieren (ich habe hier den Schwerkraft-code in der player action):

action my_player
{
var distance_to_ground;
//...
while(1)
{
vec_set (temp, my.x); // copy player's position to temp
temp.z -= 5000; // set temp.z 5000 quants below player's origin
distance_to_ground = c_trace (my.x, temp.x, IGNORE_ME | IGNORE_PASSABLE | USE_BOX);
//...
}
}

Ansonsten oberhalb der while-Schleife die Bounding Box an das Modell anpassen, entweder mit c_setminmax, oder direkt (mit my.min_x etc).

Ich kann leider nicht genau sagen, was an eurem Code nicht stimmt (bin nur Hobbyprogrammierer ) ...
© 2024 lite-C Forums