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

1

22.01.2008, 19:05

Strahl / Modell Schnittpunkt

Ich glaube, dass hier ein paar mehr Mathebegeisterte als im JLI sind, also frag ich nochmal :D


So, ich habe jetzt mal einen PickRay ausgerechnet (was mit gluUnProject wirklich leicht war Very Happy ) und ne Funktion Kugel/Strahl geschrieben (ist ja auch eher leicht).
Jetzt fehlt eigentlich nur noch Strahl / Dreieck. Das würde bedeuten, aus 3 Punkten Ebene ausrechnen, Punkt auf Ebene ausrechnen und testen ob der Schnittpunkt im Dreieck liegt (entweder Innenseite der Begrenzungsbenen (die man auch noch ausrechnen müsste) oder mit den Winkeln zu allen Eckpunkten, letzteres dürfte schneller sein).
Ebenen kann man natürlich im Voraus berechnen, aber nur bei statischen Modellen.
Will ich jetzt ein Modell mit ~1.000 Dreiecken testen, ist das ja schon ein ziemlicher Aufwand.
Nun, wie würde man das ganze Optimieren? Man könnte ja irgendwie sowas wie einen Octree machen, mit verschachtelten Quadern, auf die die Dreiecke aufgeteilt sind. Nur um einen Quader mit einem Strahl zu testen, müsste man ja auch wieder 6 Ebenen haben und dann gucken ob die Schnittpunkte in den Begrenzungen liegen. Hört sich für mich nach den Aufwand von 6 Dreiecken an.
Außerdem, wenn ich jetzt einen animierten Charakter habe, wie mach ich dann noch einen Octree? Ich müsste ja bei jeder Bewegung neu bestimmen, in welcher Sektion die Dreiecke liegen.

Evtl. könnte ich den Character in Submeshs aufteilen, und die dann mit ner Kugel oder auch nem Quader (obwohl Strahl/Kugel ja schneller als Strahl/Quader sein sollte) umgeben. Aber dann hätte ich wieder mehr Drawcalls.
Ich könnte auch ein Kollisionsobjekt mit weniger Ecken machen, dann würde es ungenauer, ich hätte mehr Aufwand, und ich hätte Performaceverlust, weil ich dieses neue Modell ja auch animieren müsste.

Zur Zeit siehts also so aus, dass statische Modelle zwar einen Octree haben könnten, dieser aber wegen dem Aufwand Quader/Strahl nur wenige Unterteilungen haben sollte, und dass animierte Modelle so oder so doof sind.

Evtl. könnte ich auch für ein Dreieck gucken, ob es überhaupt nah genug am Strahl ist, um geschnitten zu werden, was nichts anderes als eine Kugel um jedes Dreieck wäre. Eine Kugel zu testen geht schneller als ein Dreieck zu testen, aber zusammen mit dem Berechnen der Kugel könnte es doch wieder murks sein.

Irgendwelche Ideen?
Lieber dumm fragen, als dumm bleiben!

Anonymous

unregistriert

2

22.01.2008, 19:14

Re: Strahl / Modell Schnittpunkt

Ich sehe keinen Grund, warum man so etwas schnell tun muesste. Also wo ist das Problem? f'`8k


Gruß, TGGC (making great games since 1992)

3

22.01.2008, 19:34

Wenn man es optimieren kann, würde ich es schon gerne noch ein wenig optimieren.
Lieber dumm fragen, als dumm bleiben!

Black-Panther

Alter Hase

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

4

23.01.2008, 00:16

Für Charaktere bietet sich an, BoundingVolumes um jeden Bone zu legen und diese dann zu testen. Im Normalfall solltest du nicht allzuviele Bones haben. Ich würd sie mit einer Boundingbox umschließen, da da das CollisionCulling effizienter ist (vor allem, weil bones eben quaderförmig sind!). Sobald eine mögliche Kollision vorkommt, jedes Dreieck des Bones testen, wobei du die Dreiecke auf der Rückseite (vom Strahl aus gesehen) natürlich weglassen kannst (handelt sich ja hoffentlich um einen geschlossenen Körper? ^^)
Viel mehr wirst du nicht optimieren können. In diesem Fall würde sich das Kollisionsmodell (LowPoly) auch noch auszahlen, weil du es ja nicht komplett animieren musst. Du berechnest ja sowieso die Transformationsmatrizen für jeden Joint und das Kollisionsmodell transformierst du nur dann und dort wo es auch getestet werden soll (sonst arbeitest du sowieso mit den BoundingBoxes!).
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

Anonymous

unregistriert

5

23.01.2008, 10:45

Zitat von »"Jonathan_Klein"«

Wenn man es optimieren kann, würde ich es schon gerne noch ein wenig optimieren.
Tja, keine Ahnung was der Abrexxes jetzt persoenlich gegen mich hat. Aber selbst wenn ihm das jetzt wieder nicht passen sollte: Ich bleib dabei, ich wuerde es nicht machen. Ist ja auch ne alte Programmiereregel, das man nicht alles optimiert, nur weil man es kann. f'`8k


Gruß, TGGC (making great games since 1992)

3dcoder

Frischling

Beiträge: 40

Wohnort: Krefeld

  • Private Nachricht senden

6

23.01.2008, 11:03

Wenn es dir darum geht einen Treffer durch einen Schuss mit der Maus zu erkennen, dann reicht es wenn du deinem Model Hitboxen gibst und nur diese auf Kollision testest. Diese Boxen liegen eng an den Körperteilen an die bei einem Treffer Schaden verursachen: Körper, Kopf und Gliedmassen z.B.. Die Hitboxen müssten natürlich mit den Bones verknüpft sein damit sie bei der Animation an den richtigen Orten bleiben. Du kannst ihnen auch ein spezielles Material zuweisen und einfach mitmodellieren - dann aber aufgrund des speziellen Materials im Spiel nicht zeichnen.
Wenn dann eine Hitbox getroffen wird kannst du ja der dazugehörigen Bone einen Impuls geben und diese damit nach hinten schleudern (falls du eine Ragdoll implementiert hast).
Es werden hier also nur die Hitboxen geprüft - nicht die ganz Geometrie des Characters. Das spart schon viel Rechenzeit.

Grüße

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

7

23.01.2008, 11:44

Zitat von »"TGGC"«

st ja auch ne alte Programmiereregel, das man nicht alles optimiert, nur weil man es kann.


hä? die regel möchte ich gerne mal in irgend einem fachbuch sehen! was spricht gegen optimierung? da fällt mir nur übersicht des codes ein, und das lässt sich beim optimieren auch erhalten wenn man sich clever genug anstellt, bzw. für speed würde ich IMMER optimieren!

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

8

23.01.2008, 11:53

Naja, bevor man einfach so "irgendwo" optimiert, sollte man Messungen durchführen.
In den meisten Fällen verschätzt man sich nämlich ganz ordentlich, und der Teil, von dem man glaubt, dass er das Programm ausbremst, macht nur ein paar Prozent aus. 90% der Zeit gehen dann dort drauf, wo man es gar nicht vermutet hätte.
Also messen und nicht raten.
Sonst verschwendet man seine Zeit, macht den Code unnötig unlesbar oder bringt sogar noch neue Bugs herein.

Eine andere Sache ist es natürlich, wenn man es schneller machen will, weil man gerne eine bestimmte Technik mal ausprobieren will.

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

9

23.01.2008, 11:59

Zitat von »"TGGC"«

Tja, keine Ahnung was der Abrexxes jetzt persoenlich gegen mich hat. Aber selbst wenn ihm das jetzt wieder nicht passen sollte: Ich bleib dabei, ich wuerde es nicht machen. Ist ja auch ne alte Programmiereregel, das man nicht alles optimiert, nur weil man es kann.


Hättest du das von Anfang an so ausgedrückt hätte keiner ein Problem damit gehabt.

Anonymous

unregistriert

10

23.01.2008, 12:01

Zitat von »"TrommlBomml"«

hä? die regel möchte ich gerne mal in irgend einem fachbuch sehen!
Ja das faende ich auch gut. Ein paar Fachbuecher wuerden dir ja sicher nicht schaden.

http://www.google.de/search?hl=de&q=premature+optimization&meta= f'`8k


Gruß, TGGC (making great games since 1992)

Werbeanzeige