Ich weiß leider nicht, ob diese Technik der Kollisionserkennung schon von jemandem benutzt wurde und ob es dafür einen Namen gibt
Ich hab es einfach umgemünzt aus einer Computergrafik-Vorlesung, wo die Schattenberechnung eines Raytracers über den Z-Buffer und damit die Sichtbarkeistbestimmung läuft.
Ok, zwischen einem Raytracer und OpenGL-Echtzeitgrafik ist ein Unterschied, aber prinzipiell könnte es funktionieren.
Der Witz bei meinem Spiel ist ja, das es eigentlich egal ist, welche Objekte kollidieren, da es nur Kollisionen des Raumschiffs mit anderen Objekten geben kann (man stelle sich ein klassisches "Raumschiff versucht durch Asteroidenfeld zu fliegen" - Szenario vor).
Also bisher bin ich soweit, dass ich mit gluProject aus Objektkoordinaten Fensterkoordinaten berechne, mit denen ich dann über glReadPixels die Tiefe eines Fenster-Pixels bestimmen kann.
Theorie:
Ist die Tiefe eines Pixels geringer als die Tiefe des Objektes, dann wird das Objekt an dieser Stelle durch ein anderes verdeckt, also Kollision.
Praxis:
Funktioniert leider nicht so einfach, denn es müssten ja aus den Eckpunkten der Objektpolygone alle Pixel des Objektes berechnet werden. Keine Ahnung, wie das ohne größeren Aufwand gehen soll.
Deswegen ein alternativer Ansatz: 2D-Boundingbox um das zu prüfende Objekt legen und innerhalb der Box die Tiefenwerte aller Pixel bestimmen. Nachbarpixel vergleichen. Wenn dabei ein Pixel mit Tiefe=Objekt an ein Pixel mit Tiefe=AnderesObjekt angrenzt, dann kann man das auch als Kollision ansehen, auch wenn sie sich eigentlich nur berühren.
Leider funktioniert das Auslesen der Tiefe bisher nur unzuverlässig und liefert unglaublich kleine Zahlen, obwohl ich versucht habe, die Grenzen des Tiefenbuffers von 0..1 auf 0..1000 zu erhöhen.