Registriert: Sa Dez 30, 2006 17:01 Beiträge: 22 Wohnort: NRW/Fröndenberg
Hi,
ich arbeite seit ein paar Tagen mit OpenGL und habe gerade meine ersten Erfolge erzielt Nun habe ich aber eine Frage. In OpenGL zeichnet man ja normalerweise so, dass man die komplette Matrix dreht. Also wenn ich ein Objekte z.B. im 15°Winkel zeichnen will, drehe ich ja alles per glRotate(). Damit habe ich mir erstmal ein einfaches Objekt "Triangle" angelegt, dem Koordinaten gegeben, eine Bewegungsrichtung, move/draw Funktionen etc. Das rennt auch alles so wunderbar, nur ein Problem habe ich: Wenn ich die Bewegungsrichtung ändere, ändere ich intern den kompletten Winkel per glRotate und bewege alles um XX Position auf der X-Achse.
Das hat den Vorteil, dass sich mein Objekt gleich in die gewünschte Richtung dreht. Der Nachteil ist, dass sich meine Y-Koordinaten nicht ändern. Die werden am Anfang initialisiert und bleiben dann im gesamten Programm gleich.
Wie stelle ich nun (am besten wie es in OpenGL natürlich üblich ist) gescheihte Kollisionsberechnungen an, wenn ich immer den gleichen Y Punkt habe?
Ich könnte natürlich per sin/cos alle Y-Koordinaten hochrechnen, aber ich glaube dann würde ich mir meine Animation zerschissen. (weil sich die "wahren" Y-Punkte für OpenGL ja nicht ändern sollten, wenn ich das auf diese Art und Weise mache). Dies würde dann dazu führen, dass ich intern zwei Y-Koordinaten hätte -> die "wahren" und die errechneten.
Registriert: Do Feb 21, 2008 10:49 Beiträge: 55 Wohnort: Dresden
Programmiersprache: FPC/Linux
das problem ist natürlich, dass du für kollisionsberechnungen die tatsächlichen vertices in weltkoordinaten brauchst. idealer weise benutzt du für deine objekte bounding volumes. am besten kugeln, dann musst du immer nur einen punkt (den mittelpunkt der kugel) in tatsächlichen weltkoordinaten berechnen, das ist die perfomanteste lösung für dein problem. bei starren objekten, die eine genauere kollisionsabfrage brauchen, bevorzuge ich es die vertices mit ihren bereits fertigen weltkoordinaten zu speichern, dann wirds einfach bequemer. allerdings wird zum beispiel eine kollisionsabfrage, die mit dreiecken und zb strahlen oder segmenten arbeitet bei bewegten objekten hässlich, da du ja die vertices bei jedem frame neu berechnen musst. wenn du da jetzt ein objekt mit sagen wir mal 5000 vertices hast, wird aus deinem programm ganz schnell ne diashow...
Registriert: Sa Dez 30, 2006 17:01 Beiträge: 22 Wohnort: NRW/Fröndenberg
Okay, also ich habe das momentan so umgesetzt, dass ich die exakte Position berechne und damit zeichne. Nur kommt hier nun ein Problem von OpenGL:
Ich habe ein bewegendes Objekt. Nun will ich berechnen, wann diese Objekt den Randen meines Fensters erreicht (z.B. bei 800x600). Wie bekomme ich hier nun vergleichbare Werte hin? Also bei OpenGL hat man ja in dem Sinne keine Pixel, sondern Einheiten, deren Größe sich durch z-Achse ergeben. Gibts da einen Weg das irgendwie umzurechnen, sodass 1Einheit gleich 1 Pixel ist?
Mitglieder in diesem Forum: 0 Mitglieder und 4 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.