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

Aktuelle Zeit: Fr Jul 18, 2025 11:22

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



Ein neues Thema erstellen Auf das Thema antworten  [ 18 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
BeitragVerfasst: Mo Jan 12, 2009 12:12 
Offline
DGL Member

Registriert: Mo Jan 12, 2009 09:32
Beiträge: 8
Hallo!

Ich habe ein Projekt wo ich eine Art Balkendiagramm-Statistik (aktualisierte Werte bekomme ich im Sekundentakt per UDP) in 3D mit "sich-automatisch-entfernender Kamera" realisieren möchte. (Damit kein Ruckeln erkennbar ist und keine Balken beim Erreichen des Limits eines anderen Balkens sichtbar verkleinert werden müssen)
Hinzu kommt dass es keine normalen Balken sein sollen sondern Biergläser (Transparenz) die sich je nach Prozentpunkten mit Bier füllen.

Wie könnte man dies mit OpenGL realisieren?

Also mir gehts jetzt sowohl um die Punkte Glas (Transparenz, Reflexion) und Bier (als Flüssigkeit? Gibt es da spezielle Shader die sich dafür eignen würden?) als auch um die Grundstruktur nach der man so ein Projekt planen könnte. (Habe einen Thread in dem ich die Daten per UDP empfange, wie verbindet man den optimal mit der OpenGL-Seite? Die Zeichenroutinen möchte ich lieber nicht in Threads aufspalten)

Wäre nett wenn Ihr ein paar Vorschläge dazu hättet.

Danke!

mfG,
Clemens


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 12, 2009 12:51 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Mal abgesehen davon, dass du hier im Falschen Forum bist (in diesem Unterforum werden nur Projekte vorgestellt, die schon in Arbeit sind und ähnliches, keine Fragen. Dazu die Foren im zweiten Block benutzen oder Off-Topic)
[/disallowedmodmode]
[helpmode]

Nun zu deinem Problem. Die Reflektion würde ich über Environmentmaps realisiern, ohne großen Wert auf die Korrektheit zu legen. Sonst ist das zu viel, was du pro Frame machen musst, je nach Anzahl der Biergläser.

Für die Flüssigkeit entweder Metakörper verwenden oder sowas... Keine Ahnung. Wenn du Refraktion willst, wird das wohl noch komplizierter, da wird wohl Cubemapping nötig, ansonsten halt einfach den Alphakanal verwenden.

Zeichnen kannst du im Thread sowieso nicht wirklich, weil die Rendercontexte Thread-Spezifisch sind. Also müsstest du mit Synchronize arbeiten. Weiterhin würde ich UDP eher NICHT empfehlen, da du da nicht sicher sein kannst, dass die Daten in der richtigen Reihenfolge ankommen, wenn überhaupt. TCP sollte auf jeden Fall genug sein, wenn du nicht mehr als 4096 Single-Werte oder 2048 Double-Werte pro Sekunde verschicken willst (16KByte/sec sind das).

Gruß Lord Horazont

//Edit: Jetzt, wo ich wieder zeit habe noch schnell ein paar Links hinzugefügt.

_________________
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: Mo Jan 12, 2009 14:16 
Offline
DGL Member

Registriert: Sa Nov 24, 2007 11:59
Beiträge: 116
Programmiersprache: FreePascal
Fließendes Bier könnte man doch rein theoretisch auch mit Partikeln realisieren und das Bier, was dann im Glas ist, sollte darstellbar sein, indem man den inneren Teil des Körpers des Bierglases ein zweites Mal rendert, den zweiten mithilfe von Clipping Planes an der gewünschten Höhe abschneidet und gelb färbt (oder eine Biertextur draufmappt, am besten mit animierten Blasen :D). Den von obern sichtbaren Teil des Schaumes sollte man durch einfaches lineares Interpolieren errechnen können (man muss dazu nur wissen, zwischen welchen Vertices die Füllhöhe des Glases liegt). Dafür kann man eine Textur benutzen, eventuell auch Bumpmapping (welches ueber Shader einfacher realisierbar sein dürfte als über die API...)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 13, 2009 09:03 
Offline
DGL Member

Registriert: Mo Jan 12, 2009 09:32
Beiträge: 8
Danke für eure schnellen Antworten!

Mit Environmentmapping meinst du eigentlich Cubemapping?

Also das Glas könnte ich mit der GL_ARB_Texture_Cube_Map-Erweiterung sehr realistisch aussehen lassen, oder?

Für das flüssige Bier innen drin, hätte ich mir erst überlegt das selbe zu verwenden wie bei Spielen oft Wasser gezeichnet wird.
Wird das mit "Metakörpern" gemacht? Ich konnte leider unter dem Begriff nicht viel finden. Um was handelt es sich dabei?

Ich brauch auf jeden Fall mal eine Biertextur, oder?

Was wäre eigentlich mit dieser Methode, wie sie hier in folgendem Tutorial erklärt wird?
http://wiki.delphigl.com/index.php/Tuto ... ssereffekt


@Ireyon: Danke, meinst du das Bier selbst mit Partikeln und den Schaum "bumpmappen"?
Ich hab jetzt nicht genau verstanden warum man interpolieren sollte?
Die Höhe des Schaums könnte man ja anteilsmäßig festlegen.
Und wie meinst du "was über Shader einfacher wäre als über die API"?
Also nicht so wie in diesem Tutorial: http://wiki.delphigl.com/index.php/Tutorial_BumpMap sondern per Shader? Wie würde das funktionieren?

Hm das mit UDP hängt leider nicht an mir, ich bekomme die Daten von einer Hardware-Schnittstelle mit einem älteren Atmel AVR Prozessor, der leider für TCP zu langsam ist und auch keine Bibliotheken dafür installiert sind, deshalb müssen wir selsbt eine Art "Handshake" oder CRC-Bestätigung implementieren.


Mit was fängt man eigentlich am Besten an, bzw. wie ordnet ihr so ein Projekt?
Erstellt ihr zuerst die Grunstruktur im Programm, oder beginnt ihr mit den Texturen?
Habe zwar sehr viel Programmiererfahrung, mit OpenGL habe ich aber bis jetzt nur rumgespielt. Dies ist jetzt mein erstes (etwas größeres) Projekt.
Ein paar organisatorische Tipps wären sicher noch hilfreich!

Ach ja noch was: Ist es sinnvoll, den neuen v.3 Header zu verwenden, oder spielt das bei meinen Anforderungen gar keine Rolle?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 13, 2009 15:45 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Das Wassereffekt-Tutorial betrifft nur gerade ebenen. Also keine gebogenen wie Biergläser. Und für mehr als eine Ebene ist das auch nicht performant genug (bevor du jetz auf die Idee kommst, für jede Fläche des Bierglases eine Oberfläche zu rendern ;)).

Ok... Wenn das UDP nur übers lokale Netzwerk (am besten nur über ein Kabel) geht, sollte das auch kein Problem geben, zumindest was die Reihenfolge betrifft nicht.

//Edit: Environmentmapping: Für die Gläser würde ich eventuell eher Sphere-Mapping nehmen, mit einer vorgerenderten Spheremap, die ein paar nette Lichtpunkte enthält. Einfach, dass man erkennt, dass es eine Reflektion darstellen soll ;).

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: Di Jan 13, 2009 17:47 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Also, moment mal. Wieso Wasserschader für das Bierglas? Der Schader macht doch nur für Wellen an der Oberfläche Sinn. Und da ist Schaum. Also am ehesten noch ein Schaumshader. ;)

Die Flüssigkeit ist ja relativ glatt am Glas ausgerichtet. Da kannst du also z.B. eine Textur schrittweise einblenden. Das sollte gehn.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 14, 2009 08:49 
Offline
DGL Member

Registriert: Mo Jan 12, 2009 09:32
Beiträge: 8
Ok, ich fasse also zusammen:

Für die Gläser Sphere-Mapping, da Cube-Mabbing zwar besser aussieht aber zu viel Leistung frisst. (Es müssen max 16 Gläser nebeneinander flüssig dargestellt werden können)

Für das Bier nur eine goldfarbene Bier-Textur, die ich dann am oberen Rand noch mit Schaum abschließe?
Mit Shadern hab ich allgemein noch nie gearbeitet, ist es deshalb sinnvoll einen Shader für dieses Projekt einzusetzen?

Was mache ich wenn kleine Blasen gewünscht sind? Wird dann wahrscheinlich deutlicher komplizierter, oder?
Wie könnte man das animieren?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 14, 2009 10:47 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jul 29, 2003 00:11
Beiträge: 436
Da könntest du kleine Billboard-Partikel aufsteigen lassen, ist nicht wirklich kompliziert. Mit der richtigen Textur dürfte das ganz nett aussehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 14, 2009 17:12 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Wenn du eine Biertextur hast die Kachelbar ist, dann kannst du die Animation hinkriegen, indem du die Textur direkt animierst. (einfach die Texturmatrix aktivieren und dann mit glTranslate bei jedem Durchlauf etwas verschieben).

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 23, 2009 10:32 
Offline
DGL Member

Registriert: Mo Jan 12, 2009 09:32
Beiträge: 8
Habt ihr eine Idee wo ich ein schönes hochauflösendes Bierglasmodel herbekomme?

Ich fand viele kostenpflichtige Angebote, möchte aber lieber nicht gleich 20$ für so ein Model ausgeben.

Was würdet ihr vorschlagen?

Oder soll ich das Glas manuell mit OpenGL zeichnen?

Ich bekam jetzt einige Anregungen zum Thema Flüssigkeit.
Ich setze also in das Glas ein Volumen mit Biertextur als Oberfläche welche ich alle Paar Zeiteinheiten etwas verschiebe?

Wie funktioniert das mit "Billboard-Partikel"?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 23, 2009 11:31 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Für Billboards siehe Sphärisches Billboard, dort sind drei Methoden dafür erklärt.

Das Glas... Zieh dir Blender und versuch dich mal selber. Das sollte nicht so ein großer Aufwand sein... Oder willst du irgendwas sehr komplexes? Wenn du bei der Bedienung hilfe brauchst und es hübsch machen willst, versuch dich mal am WikiBook "Blender 3D: Noob to Pro". Das gibt einige sehr hilfreiche Tipps, gerade für den Anfang. Sobald die den Subsurf-Modifier erklärt haben, kannst du eigentlich loslegen, glaube ich. Außer du willst noch ein paar Kniffs mit Hotkeys lernen oder findest eine Funktion nicht.

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: Do Jan 29, 2009 08:45 
Offline
DGL Member

Registriert: Mo Jan 12, 2009 09:32
Beiträge: 8
Danke, ich hab mich nun in den letzten Tagen mit Blender auseinandergesetzt.

Ich bin aber nicht sicher ob mein Ansatz der richtige ist, um ein Bierglas zu erstellen.

Ich erzeuge einen Mesh->Cylinder und erweitere in mit EKey nach oben (Extend Region oder so), so dass er länger wird.
Nun könnte ich ihn unten ein bisschen "zusammenschnüren" um eine nach oben sich öffnende Form zu erhalten und dies dann bei jedem Stück wiederholen.

Das Bierglas sollte ungefähr so wie dieses aussehen:
http://www.the3dstudio.com/product_deta ... duct=59037

Das Glas wollte ich nach diesem Tutorial machen: http://wiki.blender.org/index.php/Tutor ... lear_Glass

Wie würdet ihr an das Design eines solchen Bierglases herangehen?

Wäre froh um jede Hilfe!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 29, 2009 13:31 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Das Problem ist, dass OpenGL kein Raytracer sondern ein Rasterizer ist. Daher werden die Glaseffekte im Programm um einiges schlechter aussehen, es sei denn du programmierst den Reflektions/Refraktionseffekt manuell per Shader/Cubemap/Spheremap nach.

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: Do Jan 29, 2009 19:29 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Muss es denn echtes 3D sein?
Du könntest auch ein Bild nehmen, das Glas mit Gimp einen Alphakanal verpassen, und dann per Blending eine Biertextur dahinter aufsteigen lassen. Solange man nicht um das Glas herumfliegt, sieht man doch eh nur die selbe Seite.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 30, 2009 08:57 
Offline
DGL Member

Registriert: Mo Jan 12, 2009 09:32
Beiträge: 8
Ja muss echtes 3D sein, die "Kamera" soll dann um eine Bar mit Nussholztheke rumkreisen, auf der die Gläser stehen.
Das Bild was ich oben mal als Beispiel für das Bierglas gepostet habe, kommt gut hin.. ungefähr so ein Holz darunter und darüber 8 solche Gläser nebeneinander.

Bedeutet das, ich muss zwar erst ein Glasmaterial im Model verwenden, dieses dann aber mit OpenGL "weiterbearbeiten" und die Reflektionseffekte erzeugen?
Oder muss ich dann in Blender gar kein Glasmaterial verwenden und diesen Effekt nur von OpenGL aus erstellen?

Naturgemäß werden mehrere Wege nach Rom führen, doch wie würdet ihr vorgehen?

Kann mir jemand einen Tipp geben, wie ich die typische Bierglas-Form, also einen Zylinder der geschwungen nach oben läuft, designen kann?
Einschnüren kann ich die Teile, ich wollte aber so einen schönen rundlichen Schwung reinbekommen. Gibts da einen Modifier oder muss ich die Zylinderabschnitte manuell einschnüren, aufeinander setzen und danach glätten?


Edit: Im Shader-Tutorial las ich "andere noch nicht programmierbare Teile der GL-Pipeline wie z.B. die Rasterisierung können momentan noch nicht über Shader beeinflusst werden. "
Fällt somit der Shader für mich als Option weg?


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 18 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 10 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.009s | 16 Queries | GZIP : On ]