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.
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 network • my 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
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 ). 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...)
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?
@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?
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 network • my 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
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
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?
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
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?
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 network • my 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
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.
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 network • my 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
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
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?
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.