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

Aktuelle Zeit: Fr Jul 18, 2025 11:17

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



Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Farben überprüfen - Kollision?
BeitragVerfasst: Sa Jun 07, 2008 19:09 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jun 29, 2007 17:56
Beiträge: 9
Wohnort: Cottbus
Hallo. :)

Zu meinem Problem, man nehme sich ein Bild, welches Oberhalb schwarz ist, und unterhalb dann blau (ohne Übergang der Farben).
Ist es nun möglich, wenn ich ein Viereck zeichne (mit GL_QUADS versteht sich) und ich in einem Timer festlege, dass dieses Viereck immer sich immer weiter nach unten bewegt, dass diese Bewegung stoppt sobald es auf den blauen Untergrund trifft?

Also quasi, dass man die ganze Zeit am untersten Punkt überprüft ob die Farbe noch schwarz ist und sobald diese dann blau wird stoppt er sofort die Bewegung?

Mit freundlichem Gruß


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 07, 2008 22:20 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jul 29, 2003 00:11
Beiträge: 436
Du hast doch bestimmt irgendwo festgelegt, wo das blau beginnt. Genau diesen Wert nimmst du. :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 07, 2008 22:27 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jun 29, 2007 17:56
Beiträge: 9
Wohnort: Cottbus
Naja, so direkt festgelegt nicht.

Man hat ja ein Bild (eine *.tga-Datei) Wo diese 2 Farben enthalten sind.

Und im Endeffekt hätte ich ja dann nicht gern nur oben schwarz und unten blau, sondern stückchenweise blaue Flächen.
So, dass man dann quasi eine Art Jump'n run bauen kann, wo die Männchen sich auf den blauen Flächen bewegen können.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 08, 2008 06:58 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 30, 2007 18:35
Beiträge: 331
Hallo,

du kannst mit glReadPixels die Farbe an der bestimmten Stelle auslesen.
Das machst du dann an der Stelle, die du haben willst. Dann schaust du, welche Farbe es ist und stoppst oder lässt weiterlaufen.

Markus


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 08, 2008 10:17 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jun 29, 2007 17:56
Beiträge: 9
Wohnort: Cottbus
Alles klar, dann informier ich mich mal ein bisschen darüber.

Ich bedanke mich vielmals. :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 08, 2008 11:00 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
Ich würde die kollision komplett von OpenGL trennen. Ich würde die Bitmaps in 8bit konvertieren, und ein ein 2D array stopfen. Und dann die Tests von Hand ausführen. Wenn du mit Bitshifts zurechtkommst, kannst du auch runter auf 1bit pro pixel.

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 08, 2008 12:15 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jun 29, 2007 17:56
Beiträge: 9
Wohnort: Cottbus
Das Problem an einem Array dürfte dann aber daran liegen, dass man keine "Schrägen" und ähnliches anwenden kann.
Sondern, dass es wirklich nur möglich ist gerade Strecken zu nutzen - Und das gefällt mir nicht so. :)

Wobei ich auch noch nicht wirklich mit glReadPixels() klar komme - weil es sehr kompliziert erklärt wird überall. Aber ich denke,
nach genügend Suchzeit wird man das schon verstehen. ^^


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 08, 2008 12:27 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
Ich weiß nur nicht was du dir von ReadPixels erhoffst.
Beim arrayverfahren hast du halt ein großes Array in dem für jeden Pixel drinsteht ob der begehbar ist. Nun musst du von Hand schaun mit welchen Pixeln dein Objekt kollidiert und dann passend reagieren. Das ist nicht ganz einfach, es gibt aber sicher fertige bibliotheken die pixelgenaue kollision in 2D anbieten.

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 08, 2008 13:28 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jun 29, 2007 17:56
Beiträge: 9
Wohnort: Cottbus
Also ich hab das mit dem glReadPixels() noch nicht ganz verstanden.

Nach diesem Link ist es mir jetzt zwar gelungen anzeigen zu lassen, wie man die einzelnen (Rot, Grün, Blau) Zusammensetzungen von Farben anzeigt.

Code:
  1.     var
  2.       Res: Array [0..3] of byte;
  3.       begin
  4.       glReadPixels(1, 1, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, @Res[0]);


Allerdings liest er das nicht aus der *.tga aus sondern nimmt eine Farbe die in dem Bild gar nicht enthalten ist.

Ich habe nun also 2 Fragen.

1. Welche Farbe liest er ein?
2. Wie ist es möglich, die Farben aus einem Bild einzulesen? Nach der GLWiki heißt es aus dem Framebuffer - aber was genau stellt man sich unter einem Framebuffer vor?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 08, 2008 13:29 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Alternativ, wenn du deine Daten als Eckpunkte (Vektoren, Vertices) zur verfügung hast und etwas tiefer in die Materie gehen willst, schau dir doch mal das Tutorial Separating Axis Theorem an.

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 08, 2008 14:10 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jun 29, 2007 17:56
Beiträge: 9
Wohnort: Cottbus
Oh alles klar.
Ich hab nen bisschen weiter rumprobiert.

Und jetzt weiß ich, dass ich glReadPixels(); im falschen Moment angewandt hab. Und das man es in dem Timer schreiben muss. (Ich hatte es vorher im Renderprozess (Wobei es eigentlich das gleiche sein sollte, weil er ja das Rendern im Timer ausführt) Aber es klappt halt im Timer.) ^^


Ich danke euch allen für eure Hilfe.

P.S. Und das Tutorial mit den Vektoren werd ich mir auch mal anschauen. Danke.

_________________
Mit freundlichem Gruß

Robin


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 12, 2008 21:06 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jun 29, 2007 17:56
Beiträge: 9
Wohnort: Cottbus
Hallo, ich bin´s nochmal. :)

Ich bin auf ein weiteres Problem bei der Funktion glReadPixels() getroffen.

Ich hole mal etwas weiter aus. Also ich versuche zur Zeit ein Jump'N Run zu programmieren.
Da ich dort nicht immer die einzelnen Eckpunkte einzeln kontrollieren möchte, um später auch die Level schnell zu ändern, kam ich halt auf die Idee, dass man ja einfach 2 Bilder nehmen könnte. Bei dem einen Bild hat man die Texturen und alles was man später dem Nutzer zeigen möchte. Und bei dem anderen benutzt man nur 2 Farben, also zum Beispiel "blau" als Farbe für die Wände und weiß als Farbe für den Platz, wo sich das Männchen bewegen darf.

Und hierbei bin ich bei glReadPixels auf ein Problem gestoßen, denn wenn ich das Bild mit den Texturen anzeigen möchte, dann wählt er die Farben nicht mehr aus dem Bild wo die Wände eingezeichnet werden.
Ist es möglich glReadPixels irgendwie so zu verwenden, dass man es auf ein bestimmtes Bild anwendet?
Oder gibt es dafür wiederum einen anderen Befehl?

_________________
Mit freundlichem Gruß

Robin


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 12, 2008 22:49 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Wenn du das unbedingt so machen willst...würde ich folgende Vorgehensweise vorschlagen:

1. Das Kollisionsbild auf ein Quad zeichen (deckungsgleich mit dem noch folgenden Quad)
2. mit glReadPixels die Werte ermitteln
3. Framebuffer mit glClear löschen oder nachfolgendes Quad näher an der Kamera zeichnen
4. Das Bild des Levels auf ein weiteres Quad zeichnen
5. Reaktionen auf die bei 2 ermittelten Werte durchführen

Gruß

damadmax

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.018s | 16 Queries | GZIP : On ]