Um mich ein bisschen in OpenGl einzuleben hatte ich mir gedacht ein ganz simples 'Autorennen' zu machen.
Ich bin jetzt so weit, dass ich mein Auto ( Quad mit Textur und Alpha) rumfahren lassen kann. ( Also das es sich immer in die richtige Richtung bewegt...) Das ganze ist 2D also man sieht es von oben.
Der nächste Schritt wäre doch jetzt eine Kollisionsabfrage zu machen.
Wenn ich mir jetzt eine schöne Textur male mit ner Straße drauf und die auf ein zweites Quad pappe, dann bringt mir das ja nicht wirklich etwas, da ich ja schlecht eine Kollisionsabfrage zwischen meinem Auto und verschiedenen Teilen einer Textur ( also Straße und außenrum) machen kann, oder?
Muss ich den Teil wo man fahren können soll als einzelnes Objekt(e) zeichnen und dann fragen ob mein Objekt immer drüber ist?
Ich weiss einfach überhaupt nicht wie ich das alles angehen soll, und wäre euch für Tipps, Anregungen, Links etc. sehr dankbar.
ja ich kenn dein problem ich hatte auch eine lösung hatte aber irgendwann keine lust mehr.
wenn du deine rennstrecke nur über dein fenster ziehen willst und nicht noch weiter ist das sogar noch "relativ" einfach.
du kannst dadurch das es 2D ist die ganze sache ja erstmal mit glortho(..) ; 2 dimensional zeichen, etwa so:
Code:
glOrtho(0,{breite der rennstreckentextur},0,{höhe der rennstreckentextur},-1,1);
glBegin(GL_QUADS);
glTexCoord2f(0,1); glVertex3f(0,{höhe der rennstreckentextur},0);
glTexCoord2f(1,1); glVertex3f({breite der rennstreckentextur},{höhe der rennstreckentextur},0);
glTexCoord2f(1,0); glVertex3f({breite der rennstreckentextur},0,0);
glTexCoord2f(0,0); glVertex3f(0,0,0);
glEnd;
damit hast du jetzt deine rennstrecke genau über dein fenster gezogen und jetzt kommt der unerfreuliche teil (beim dem ich dann auch keinen bock mehr hatte ), du musst deine textur pixel für pixel auslesen, ich hatte mal irgendwo eine doku wie bitmaps gespeichert sind, und ein kollisions abfrage mit einer bestimmten farbe machenk, da dein bild ja genau die ausmasse hat wie die coordinaten in deiner szene geht das ja dann einfach.
(sie gefällt mir tatsächlich nicht , nicht böse sein)
Ich glaube ich muss es wohl doch mit Objekten machen, wodurch ich aber auch eine höhere Flexibilität erreichen könnte( also mehrere Karten, außerdem keine farbgebundene Kollisionsabfrage )
Hat jemand ne Ahnung wie man ne Kollisionsabfrage auf viele Quads/Polygone 'automatisiert'?
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Am besten ist für eine 3D-Umgebung eine Kombination aus AABB (Axis Aligned Bounding Box) und Strahl-Dreiecks-Intersektion.
Du prüfst dann zuerst ob dein Strahl (wenn du deine Kollision so repräsentierst) mit der AABB eines Objektes kollidiert, und wenn dies der Fall ist, dann prüfst du für dieses Objekt deinen Strahl gegen dessen Dreiecke. Alternativ kannst du dann auch noch zur Kollisionsabfrage einen vereinfachten Mesh nehmen, um die Zahl der zu testenden Dreiecke zu minimieren.
Allerdings gibt es jede Menge Anwendungen bei denen bereits der (AA)BB-Test oder eine Sphären/Sphären-Kollisionsabfrage reicht. Was du nun brauchst hängt natürlich von deinen Anforderungen ab.
Hmm, für dein konkretes 2D Problem würde ich eine Textur nehmen (oder verschiedene Tiles, aus denen du größere Levels zusammensetzen kannst) - und diese in RGBA Texturen abspeichern, wobei im Alphakanal die Information steht, ob es sich um Straße, Gras, Wasser, was weiß ich handelt (bei RGBA8 hast du bis zu 256 Möglichkeiten, was locker langen sollte).
Dann wählst du auch für die Darstellung ein RGBA Format aus und stellst deine Tiles gestretcht wie du sie brauchst dar.
Für die Kollisionsfrage genügt es dann mittel glReadPixels den Alphakanal eines einzigen Pixel zurückzulesen (oder von mir aus eines pro Reifen) - und dann weißt du anhand dieses Wertes genau, worum es sich handelt.
Nachteil ist, dass mit dieser Methode das auf Kollision zu überprüfende Objekt tatsächlich auf dem Bildschirm sein muss, wobei du aber z.B. für Autos, die grad OffScreen sind einfach ein kleines Quad mit der jeweiligen Umgebung zeichnest und aus diesem die jeweilige Info ausliest - das ist einfach und fast genau so schnell, als sich den Alphawert direkt aus den Bitmapdaten der jeweiligen Textur zu holen (solange du kein SwapBuffers einbaust, sieht ja niemand, was du für komischen Unsinn treibst ).
Wenn deine Straße ohnehin ein eigenes Polygonobjekt ist, solltest du mit einer ganz normalen 2D-Punkt-Dreieckskollision bedient sein (dafür kannst du sie nicht mehr einfach im Photoshop oder Gimp zeichnen ).
Mitglieder in diesem Forum: 0 Mitglieder und 6 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.