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

Anonymous

unregistriert

1

25.05.2004, 19:52

"Denkfehler" ??? in <tbModelHitsModel> !!!??

Hi,

also ich hab mal wieder was an der Tribase gefunden wo ich mich frage soll das so sein, kapier ich es einfach nicht richtig oder ist das ein "Fehler" ???

Also so bin ich drauf gekommen : Mein "Held" läuft durch sein Level und sammelt zur Zeit nur ein paar EnergiePunkte ein.....Vorgestern hab ich ein neues 3D-Modell für die Energiepunkte erstellt und direkt eingebunden, aber : es war viel zu groß, also einfach eine Skalierungsmatrix zum Rendern benutzen und natürlich die gleiche für die Kollisionsabfrage....

Allerdings wurden die EnergieBälle jetzt schon ein gutes Stück vorher eingesammelt, also nicht da wo sie auf dem Bildschirm erscheinen.....
Hab dann nochmal die Skalierung von 0.1f abgestellt und siehe da die werden wirklich so eingesammelt als wären Sie überhaupt nicht skaliert !!!! (nochmal : ich benutzte exakt die gleiche (vorberechnete !!!!) Matrix zum Rendern wie zur Kollisionsabfrage !!!!)

Hab mich dann auf die Suche gemacht, und leider nicht die passende Stelle in tbModelHitsModelRec gefunden, weil dort siehts so aus als wird alles richtig tranformiert, oder wird eine Skalierung nicht von tbMatrixInvert bedacht und somit stimmt meine vorberechnete invertierte Matrix nicht ?

Naja, lange Rede kurzer Sinn ich habe einen <vermeintlichen> Fehler in tbModelHitsModel gefunden und zwar hier :

[code]
// Die Positionen der beiden Modelle aus den Matrizen ablesen
tbVector3 vModelA(tbVector3(mMatrixA.m41, mMatrixA.m42, mMatrixA.m43));
tbVector3 vModelB(tbVector3(mMatrixB.m41, mMatrixB.m42, mMatrixB.m43));

// Prüfen, ob sich die Umgebungskugeln der beiden Modelle schneiden.
// Falls sie es nicht tun, brauchen wir gar nicht weiter zu testen.
if(!tbSphereHitsSphere(vModelA, pModelA->m_fBoundingSphereRadius,
vModelB, pModelB->m_fBoundingSphereRadius)) return FALSE;[code]

1.) es müsste doch für die korrekte Position noch durch "m44" (falls nicht 1.0f) geteilt werden oder täusche ich mich da so extrem

2.) Die BoundingSphere wird OHNE Berücksichtigung der Skalierung geprüft und könnte so zu genau dem entgegengesetzten Problem führen, das ich gerade habe : jmd vergrössert sein Modell aufs sagen wir mal 5-fache, aber die Kollsiionsabfrage bricht ab, weil die Bounding-Boxes sich nicht treffen !!!

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

25.05.2004, 20:00

Prinzipiell hast Du da recht!
Würde man jedoch Skalierungen berücksichtigen, dann könnte man die gesamte Bounding-Sphere-Sache vergessen, denn es gibt ja auch noch Skalierungen, die dann aus der Kugel einen Ellipsoiden machen (eine gestauchte Kugel).
Von daher eignen sich die Funktionen nur für Objekte ohne Skalierung.
Ich werde das ins Buch schreiben. Danke!!!

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

3

25.05.2004, 20:07

*SDK züg*
A W-Friendly Projection Matrix, ich glaube da liegt die Antwort....

Anonymous

unregistriert

4

25.05.2004, 20:12

Zitat von »"David Scherfgen"«

...denn es gibt ja auch noch Skalierungen, die dann aus der Kugel einen Ellipsoiden machen (eine gestauchte Kugel).


Klar, hatte ich ganz vergessen, da ich immer nur mit gleichemäßiger Skalierung arbeite.....

Zitat

Von daher eignen sich die Funktionen nur für Objekte ohne Skalierung.

Meinst Du das jetzt allgemein für die Kollisionsabfragen, weil wenn man die Bounding-Sphere mal rauslässt müsste der Rest doch gehen oder haut das auch nicht hin, weil der am Anfang einen Octree erzeugt und von dem halt auch abhängt ob die Dreiecke überhaupt geprüft werden....hey langsam hab ich das Gefühl ich steig dahinter :)

Dann müsste ich halt allgemein ohne Skalierung arbeiten, aber das ist halt so viel praktischer, weil ich arbeite mit einem kleinen selbstgeschriebenen LevelEditor und seh dann halt dort schön wie gross die Objekte sein müssten....und die jetzt wieder alle im 3D-Programm skalieren.... Naja wenns nicht anders geht

Werbeanzeige