Ich bin gerade dabei, einen Pong-Clone zu programmieren, bei dem ich auf die Spielfläche beliebig ausgerichtete Strecken/Polygone setzen möchte, an denen der Ball dann entsprechend reflektiert wird.
Zunächst habe ich das ganze mal darauf beschränkt, dass ich einfache Geraden auf dem Bildschirm habe und einen Kreis mit einem Geschwindigkeitsvektor generiere. Prallt dieser auf wird der Reflexionsvektor berechnet und der Geschwindigkeitsvektor dementsprechend verändert.
Das funktioniert zur Hälfte. Zur Hälfte deshalb, weil ich wohl bei der Reflexionsvektor-Berechnung etwas nicht beachtet habe, worauf ich aber leider nicht komme.
Undzwar haben meine Geraden jeweils eine Reflektierende und eine Durchlässige Seite. Das heißt an einer Seite prallt der Kreis ab, aber kommt er von der anderen Seite, so "flutscht" er durch die Gerade durch.
Bei der Berechnung nutze ich eine Hilfsebene mit Stütz- und 2 Richtungsvektoren. Der Stützvektor ist der Schnittpunkt des Kreises mit der Geraden, der eine Richtungsvektor der Richtungsvektor der Geraden und der 2. Richtungsvektor ein Vektor in Richtung der Z-Ebene. Anhand dessen berechne ich eine Normale usw ... Und hier habe ich herausgefunden, dass, je nach dem, ob der 2. vektor in den Bildschirm hinein, bzw aus dem Bildschirm hinaus zeigt, sich auch die reflektierende und die durchlässige Seite der Geraden austauschen.
Ich füge hier mal den Quellcode der Reflexionsvektorberechnung ein:
Code:
function ReflexionsVektor(g: TGerade; v: TVektor): TVektor;
var
h: TEbene;
s1,s2,n,s2e: TVektor;
s1b:Extended;
begin
h.p:=g.p;
h.u:=g.u;
h.v:=vektor(0,0,-1);// je nach dem ob hier der z-wert negativ oder positiv ist drehen sich die Seiten der Geraden
Registriert: Mi Aug 28, 2002 17:03 Beiträge: 37 Wohnort: ABG
Hi!
Mal unabhängig von deiner Methode hätte ich das ganze so gelöst, das ich jeder Geraden einen Normalvektor verpassen, und dann das Punktprodukt zwischen Normale und Richtungsvektor berechnen würde. Ist das Punktprodukt kleiner als 0.0 dann ist der Ball praktisch von Hinten gekommen.
mfg olli
_________________ Programmieren beginnt im Kopf und endet im Compiler
Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.