Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 00:06

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Kollision - Objekt und Textur 2D
BeitragVerfasst: So Mär 14, 2004 13:40 
Offline
DGL Member

Registriert: Do Mär 11, 2004 12:33
Beiträge: 24
Hallo ihr Lieben!

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.

mfg mandumoal


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 16, 2004 18:31 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jun 20, 2003 13:59
Beiträge: 134
Hi

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:
  1.  
  2.  
  3. glOrtho(0, {breite der rennstreckentextur} ,0, {höhe der rennstreckentextur} , -1,1);
  4.  
  5. glBegin(GL_QUADS);
  6.   glTexCoord2f(0,1); glVertex3f(0,    {höhe der rennstreckentextur}, 0);
  7.   glTexCoord2f(1,1); glVertex3f({breite der rennstreckentextur}, {höhe der rennstreckentextur}, 0);
  8.   glTexCoord2f(1,0); glVertex3f({breite der rennstreckentextur}, 0, 0);
  9.   glTexCoord2f(0,0); glVertex3f(0    , 0, 0);
  10. glEnd;
  11.  
  12.  


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 :D ), 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.

gefällt dir nicht die idee oder :o .


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 17, 2004 18:40 
Offline
DGL Member

Registriert: Do Mär 11, 2004 12:33
Beiträge: 24
erstmal danke für die Antwort.

(sie gefällt mir tatsächlich nicht :D , 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'?

mfg mandumoal


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 17, 2004 19:13 
Offline
DGL Member
Benutzeravatar

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.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 18, 2004 12:58 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
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 :wink: ).

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 :wink: ).

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 8 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.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.010s | 16 Queries | GZIP : On ]