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

Aktuelle Zeit: Fr Jul 18, 2025 21:08

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



Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Messdatenauswertung
BeitragVerfasst: Fr Jan 26, 2007 17:51 
Offline
DGL Member

Registriert: Fr Jan 05, 2007 09:46
Beiträge: 7
Hallo zusammen!

Ich versuche eine Anwendung zur Auswertung von Messdaten zu schreiben. Undzwar bekomme ich über die parallele Schnittstelle nach und nach Werte, die ich in ein zweidimensionales Array eintrage. Diese Werte spiegeln sozusagen die Höhen einer Fläche dar. Die x- und y-Werte dieser Punkte sind einfachheitshalber durch die indizes des Arrays gegeben.
aDaten[3,9] mit dem Wert 6.6 bedeutet also, dass ein Punkt P[3|9|6.6] ist.
Die Größe des Arrays wird maximal etwa 1500x1500.
Die Daten kommen mit undefinierten aber doch relativ regelmäßigen Abständen. Das bedeutet leider, dass nicht alle Punkte zu einem einzigen Zeitpunkt (ausser dem Ende der Messung) bekannt sind und ich so keine Displaylisten verwenden kann. Im Moment mache ich es so, dass erst alle Werte aufgenommen werden und danach als Displayliste kompiliert werden. Ohne Displaylisten geht es leider nicht, da die Anzahl der Dreiecke einfach zu groß für meine Grafikkarte ist. Gibt es da etwas sinnvolleres mit dem ich arbeiten sollte?
Ein weiteres Problem ist, dass ich die anzuzeigende Fläche so färben will, dass Punkte auf dem Dreieck mit einer bestimmten z-Koordinate in einer bestimmten Farbe sind. Damit will ich erreichen, dass ich die Fläche am niedrigsten Punkt Blau habe und sie immer weiter nach oben hin Rot wird. Es soll helfen die Höhen und Tiefen besser sichtbar zu machen. Dazu fällt mir keine Lösung ein.

Ich würde mich über ein paar Denkanstöße sehr freuen!
MfG Lunatic


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 26, 2007 18:27 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also das Ding mit der Farbe habe ich nicht so ganz verstanden, denn Z ist normal die Tiefe. Wenn es einfach nur eine Farbe in abhängigkeit einer höhe sein soll, dann kannst du auch glColor vor dem glVertex aufrufen und schon hat der Punkt diese Farbe.

Zu deinem Problem mit den DisplayListen. Diese würde ich erst mal bei Seite legen. Da deine Grafikkarte anscheinend in der Lage ist solch große Flächen darzustellen denke, dass es sich darum um eine neuere Generation handeln muss. Dann würde ich dir VBOs wärmstens ans Herz legen. Wir haben auch ein Tutorials über Vertex Buffer Objects.

Bei den VBOs kannst du dir einen Bereich in der Grafikkarte reservieren lassen und mit hilfe dessen Pointers kannst du dann deine Daten direkt in den Speicher schreiben. So müsstest du nicht ständig immer wieder alles von neuem Aufbauen sondern updatest nur eine Stelle.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jan 27, 2007 11:41 
Offline
DGL Member

Registriert: Fr Jan 05, 2007 09:46
Beiträge: 7
Ja das mit den VBO's werde ich mal probieren.

Also wenn ich mit glColor die Farbe eines Punktes von einem Dreieck setze, scheint nicht jeder Punktder gesammten Fläche mit der gleichen Höhe dieselbe Farbe zu haben.Ich meine nun nicht die Eckpunkte sondern beliebige Punkte auf der Fläche eines Dreiecks.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jan 27, 2007 13:23 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Da würde ich mal sagen das hängt sehr stark davon ab wie deine Rahmenbedingnen aussehen. Denn du könntest zwar eine Texture da überall drüber legen aber bei einer Fläche von 1500x1500 müsste diie insgesammt (mehrere kleinere Texturen) schon mindestens 8000x8000 Pixel groß sein um wenigstens halbwegs sinnvoll etwas bewirken zu können. Das ist 1) eine ganze menge Speicher und 2) würde die Generierungen/Erstellung auch einen Moment lang in anspruchnehmen. Mit Shadern geht das zwar auch aber ich denke dafür bräuchtest du auch in irgendeiner Form irgendwelche Lookup Möglichkeiten. Außer du möchtest immer den Punkt in der Mitte oder so. Aber das klang für mich nicht ganz so.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jan 27, 2007 14:16 
Offline
DGL Member

Registriert: Fr Jan 05, 2007 09:46
Beiträge: 7
Ich bin mir nicht sicher, ob ichs richtig erklärt habe.
Also ich will einfach, dass "höhere Regionen" in Rot sind und tiefere in Blau. und halt von dem höchsten Punkt bis zum untersten der Ton langsam von Rot in Blau umschlägt. Wie bei den Farben auf einer Landkarte.
Ich hoffe es ist nun deutlicher :wink:

Edit: Hab ein schönes Beispiel gefunden:
http://www.vallen.de/wavelet/images/3d.jpg


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jan 27, 2007 15:09 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Na ja. Die Auflösung dieser Fläche ist entsprechend Groß. Somit hast du entsprechend viel Dreiecke. Und bei OpenGL kannst du jedem Punkt eine Farbe verpassen. http://wiki.delphigl.com/index.php/Bild:Tutorial_Lektion2.jpg Das sollte in vielen Fällen eigentlich vollkommen ausreichen.

Wenn es allerdings passieren kann, dass auf deiner Fläche mal ein Punkt ganz unten ist und dann der nächste sofort ganz oben oder so, dann muss man ein wenig in die "Trickkiste" greifen. Es gibt 1D Texturen. Mit denen kannst du zum Beispiel solche Verläufe erstellen. Die Texturen sind vergleichbar mit 2D Texturen. Nur haben sie eine Höhe von einem Pixel. Die Texturkoordinaten setzt du dann entsprechend der höhe und dann bekommst du überall einen Verlauf. Selbst dann wenn ein Dreieck mal von ganz unten nach ganz oben geht. Du brauchst dann allerdings keine 2 Texturkoordinaten mehr anzugeben sondern es genügt dann nur noch ein Wert. Also anstelle von glTexCoord2f würdest du glTexCoord1f benutzen.

Allerdings gibt es bei VBOs wohl kein vordeffiniertes Format welches nur mit 1 Texturkoordinaten arbeiten wird. Dazu wirst du das wohl per hand definieren müssen. Dazu hatte ich hier schon 1-2 mal was geschrieben. Die Funktionen deiner Begierde sind dann glVertexPointer und glTexCoordPointer


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jan 27, 2007 15:44 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Das Programm mit Quelltext könnte eventuell nützlich sein.
Bild

http://www.delphigl.de/files/GL_ARB_VBO.zip


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 28, 2007 15:36 
Offline
DGL Member

Registriert: So Sep 26, 2004 05:57
Beiträge: 190
Wohnort: Linz
Also die Texturcoordinaten für eine 1D-Textur könntest du mit glTexGen auch von OGL in Abhängigkeit des Z-Wertes generieren lassen. Wird dann etwa so aussehen (im C-Stil):

float Vector[4] = {0.0, 0.0, 1.0, 0.0 };
glEnable(GL_TEXTURE_GEN_S);
glTexGeni( GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR );
glTexGen( GL_S, GL_OBJECT_PLANE, Vector );

Der 1.0-Wert von Vector bedeutet hier, dass du in der Höhe Z=0 Texturcoordinate 0 und in der Höhe Z=1 Texturcoordinate 1 hast. Wenn du aber zB bis Z=100 kommst, dann kannst du den Wert entsprechend verkleinern, also wenn Z=100 eine Texturcoordinate von 1 liefern soll, dann schaut dein Vector so aus:
float Vector[4] = {0.0, 0.0, 0.01, 0.0 };


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 29, 2007 16:59 
Offline
DGL Member

Registriert: Di Jun 27, 2006 11:43
Beiträge: 22
Wohnort: Berlin
Der große Vorteil bei der Verwendung von 1D-Texturen besteht darin, daß man sie ohne die Fläche anzufaßen einfach austauschen kann und so die Höhen-Farb-Kodierung nachträglich verändern kann. Ich nutze dieses Feature in meinem Projekt intensiv. Allerdings lüge ich mich um einige OpenGL-Unhandlichkeiten durch die Verwendung von GLScene herum :D

Aber nix desto trotz: Es geht richtig klasse und ist zudem auch noch ziemlich flink!

Ich hab' dabei aber einige Probleme beim Umgang mit ATI-Karten und 1D-Texturen entdeckt. Die wollten bei der automatischen Generierung immer heiteres Koordinaten-Tauschen mit mir spielen! (Kann aber auch an der GLScene Kapselung gelegen haben :wink: )
Jedenfalls ging mit NVidia-Karten immer alles so wie man's erwartet...

apo_pq


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 29, 2007 17:29 
Offline
DGL Member

Registriert: Di Jun 27, 2006 11:43
Beiträge: 22
Wohnort: Berlin
Kann ja noch'n kleines Belegbildchen beifügen...
Wenn Du zwei Texturen hernimmst und bei der zweiten beim Generieren (GL_RGBA) die Alpha-Werte geeignet setzt, fallen durch Verwendung von GL_MODULATE quasi umsonst auch noch korrekte Höhenlinien ab...

apo_pq


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 30, 2007 20:26 
Offline
DGL Member

Registriert: Fr Jan 05, 2007 09:46
Beiträge: 7
Oh das ist genau das was ich gesucht habe =)
Vielen Dank!
Ich hoffe, ich werde es als Neuling schaffen das ganze umzusetzen ;-)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 31, 2007 09:55 
Offline
DGL Member

Registriert: Di Jun 27, 2006 11:43
Beiträge: 22
Wohnort: Berlin
Die OGL-Cracks :arrow: *) mögen es mir verzeihen, daß ich an dieser Stelle Werbung für GLScene mache 8). Es ist ja aber auch keine echte Abwerbung, weil GLScene ja auch auf OpenGL aufsetzt, es aber eben gut wegkapselt.

Ich glaube, wenn Dein Projekt nicht allzuweit fortgeschritten ist, bzw. Dein Zeitdruck es noch zuläßt, dann guck Dir doch mal GLScene an. Ich habe das Gefühl, das würde Dir viel bringen. Einarbeitung ist natürlich immer noch nötig, aber insgesamt geht alles ein wenig schneller von der Hand. Für Standardsituationen ist da nämlich alles prima gekapselt und Du gehst nur noch recht intuitiv mit Objekten um. Wenn es denn aber doch mal so richtig an's Eingemachte gehen soll, dann ist das auch immer noch durch den direkten Einsatz der OGL-Schnittstellen möglich.

Infos gibt's hier:
http://glscene.sourceforge.net/wikka/HomePage

und direkt zum Download geht's hier:
http://sourceforge.net/project/showfiles.php?group_id=29749?

Sollte Dich das dann interessieren, kann ich Dir gerne das Projekt(-lein oder -chen oder -le), das das gepostete Bild produziert hat, als Demo überlassen.


:arrow: *) Hut ab übrigens, habe eine Menge allein schon durch 'Rumstöbern auf den Seiten dieses Forums gelernt :!:


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 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 | 15 Queries | GZIP : On ]