Swogl - Swing meets JOGL - again

Hi

Nachdem mir in einem anderen Forum kurzfristig die Möglichkeit genommen wurde, die neue Version anzukündigen, mach’ ich das einfach nochmal hier:

Swogl ist eine Bibliothek, mit der man Swing-Components mit Hilfe von JOGL in 3D darstellen kann. Bisher war es nur eine kleine Demo (und viel mehr ist es immernoch nicht, aber) jetzt gibt es eine erste Version von Swogl, die man (eingeschränkt, aber in Grundzügen) schon anwenden kann, um eigene Swing-Components in 3D anzuzeigen.

Man kann also mit wenigen Zeilen wie

SwoglContainer swoglContainer = new SwoglContainer();
swoglContainer.setLayout3D(new SpaceLayout3D(swoglContainer));

SwoglComponent swoglComponent = new SwoglComponent(400, 300);
swoglComponent.setLayout(new BorderLayout());

swoglComponent.add(new JButton("Hello, Swogl!"), BorderLayout.CENTER);

swoglContainer.add(swoglComponent);

someFrame.getContentPane().add(swoglContainer);

einen JButton auf eine Fläche pappen, die man dann frei in 3D bewegen kann. Fast alle (nicht-Top-level) Swing-JComponents sollten funktionieren, außer JInternalFrames … und JPopupMenus sind ein bißchen hakelig…

Wie auch immer - wer sich’s mal ansehen will: http://javagl.de/swogl/Swogl.html

Und noch ein kleiner Screenshot:

Feedback ist natürlich immer erwünscht :slight_smile:

Auf „älteren“ Grafikkarten kann es Darstellungsprobleme geben, aber das eine oder andere kann man da vielleicht noch beheben.

Ich finde das sieht ziemlich cool aus. Leider habe ich derzeit überhaupt keine Verwendungsmöglichkeit für sowas.

Hm, willst du das nicht Open Source machen (oder hab ich was übersehen?), könnte echt spannend sein da mal genauer reinzugucken.

Hat definitiv Potential. Gibt ja sowas noch nicht glaube ich. Das Projekt Open Source zu machen und für den kommerziellen Bereich freizugeben würde es sicher noch nen ganzes Stück weiterbringen.

Hiho,

in deinem kurzen Beispiel sollte auch noch die SWOGL Component dem SWOGL Container hinzugefügt werden, damit man etwas sieht. :wink:

swoglContainer.add(swoglComponent);

bye Saxony

Wow, es hat jemand ausprobiert :slight_smile: (oder nur mitgedacht? ;)) Hab’s korrigiert.

Hmja, wie und wo man sowas verwenden sollte, weiß ich auch nicht so genau. Aber wenn erstmal die 3D-Layout-Sachen etwas klarer sind, und es ein bißchen ausführlicher getestet ist, könnte es aber ganz praktisch sein, um in komplexen Anwendungen neue Möglichkeiten zu schaffen, mehr Platz auf dem Bildschirm zu bekommen. In gewissem Sinne als mögliche Alternative zu JInternalFrames.

Es open source zu machen wurde mir schonmal nahegelegt. Es gibt aber noch einige Fragen, die … schon sehr unklar sind. Man kann ja prinzipiell beliebige (und wie man bei der Release 013 sieht, auch animierte) Geometrien für die SwoglComponents verwenden. Und die Frage, wo bei so einer animierten Geometrie z.B. das Popup einer ComboBox erscheinen sollte ist… nicht einfach zu beantworten. Dazu kommen noch einige Fragen zu Interaktion und Skalierungen usw… Aber … vielleicht würden diese Fragen sich ja bei einer „offenen“ Diskussion um offenen Quellcode leichter klären lassen.

Falls sich jemand (den ich aber zumindest vom Nicknamen her kennen wollte) das ganze schon während dieser Überlegungsphase ansehen will, kann ich ihm vielleicht per PN oder mail schonmal eine vorab-Version schicken.

Ausprobiert und nen schwarzes Fenster bekommen! :wink:

Es zeigt bei mir aber auch so komische Streifen nebem dem eigentlichen Container an (siehe Bild).

Diese sind aber klickbar und es drückt den Button im richtigen Container.

OpenSource wäre toll - weil mit decompiled obfuscated code arbeiten ist Mist! :slight_smile:

bye Saxony

OK, dieser schwarze Rand kommt vermutlich, weil die Grafikkarte keine Texturen unterstützt, die nicht PowerOf2-Abmessungen haben. Das war (im anderen Forum) auch schon früh ein Thema - eigentlich dachte ich, dass diese Grafikkarten nicht mehr sooo verbreitet sind (hier auf einer recht alten taucht es schon nichtmehr auf, aber das ist eine alte NVidia Quadro…), aber das dürfte recht schnell umzubauen sein: Einfach für jede gewählte Texturgröße die nöchstgrößere Pow2-Textur wählen … in der Hoffnung, dass durch die Skalierung keine unschönen Artefakte auftreten. Werd’ mal zusehen, dass ich das so bald wie möglich einbaue. Wenn es dich interessiert, schick’ ich dir den Code auch bei Gelegenheit mal.

Yup ich hatte schon per PM angefragt! :wink:

bye Saxony

[QUOTE=Saxony]Yup ich hatte schon per PM angefragt! :wink:
[/QUOTE]

Hm … Wenn das „M“ für „Mail“ steht (und das „P“ für „E“ :wink: ) dann seh’ ich das heute abend…aber weder hier noch im anderen Forum ist eine PN angekommen?!

Soll eigentlich personal message heißen! Die hatte ich hier über das Forum geschickt! Putzig ich versuchs nochmal!

[edit]
LoL

Ich hab dir die erste Nachricht irgendwie als ProfilNachricht rein gekloppt!
Na die habsch nun gelöscht und eine echte PM, PN oda weiß der Teufel was geschickt! :wink:
[/edit]

bye Saxony

Hiho,

so mit dem neuen Texturieren der Längen und Breiten mit nächst höherem 2^x funktioniert bei mir! ALs GraKa habe ich hier eine On-Board - Intel® 82915G/GV/910GL Express Chipset Family. Tja also ka was die kann und net kann - bisher hat sie mir aber immer mein Eclipse anzeigen können! :wink:

Im Laufe der Woche werde ich das mal noch mit einer ATI Radeon 9600 Pro und der On-Board von meinem SchleppTop versuchen.

Ich werde mal noch etwas weiter im Code lesen. Keine Angst der ist recht gut lesbar. :wink:

bye Saxony

Ah - OK :slight_smile: Dann kann das ja für die nächste Version gleich drin bleiben - das mit den schwarzen Rändern ist wohl (noch) bei einigen anderen („älteren“) Grafikkarten aufgetreten…

Hiho,

kennst du schon ähnliche Projekte wie

FengGUI

oder

Fusion
?

Diese sehen auch recht interessant aus!

bye Saxony

Sowas wie FengGUI ist schon was anderes als Swogl: Das ist AFAIK ja „nur“ ein GUI, das eben mit OpenGL gerendert wird (und einige direktere OpenGL-Zugiffe erlaubt). Mit Swing hat das wohl erstmal nichts zu tun.

Fusion sieht Swogl auf schon etwas ähnlicher, aber … scheint auf den ersten Blick nicht ganz so Swing-nah (und „mächtig“) zu sein wie Swogl. Anscheinend handelt es sich dabei um spezielle 3D-Components, die man in sein Programm einbauen kann - aber man kann wohl nicht beliebige Swing-Components beliebig in 3D rumschieben. Leider habe ich spontan keine Codesamples gefunden.
Dass man die Components, während sie 3D sind, nicht bedienen kann, könnte man als weiteren „„Schwachpunkt““ sehen. (Bei der Demo gibt es bei mir auch ein wildes Flackern, aber … das sind eher Kleinigkeiten, die mit der Hardware zusammenhängen können… ähnliche Probleme gibt’s bei Swogl ja sicher auch)

Es gibt auch noch etliche weitere „ähnliche“ Ansätze… U.a. auch sowas wie XTrans (das drittletzte auf auf https://jogl-demos.dev.java.net/ ). Aber auch hier hat man keine „echten“ Swing-Components „echt“ in 3D.

Das schöne (oder zumindest das Ziel) bei Swogl ist ja, dass man im wesentlichen ein Programm hat, das z.B. schon Tabs oder JInternalFrames enthält, und man einfach sagen kann: „So, die Components, die momentan auf den Tabs oder in den Frames liegen hätt’ ich jetzt gerne in 3D“ - und das ganze dann mit 10 Zeilen erledigt ist.

Die größte Ähnlichkeit zu Swogl hat eigentlich http://www.sun.com/software/looking_glass/ , aber dort geht es nicht um eine kleine, handliche Bibliothek, der man sagen kann: „Hey, mach’ das ma’ 3D…“. Das ist wohl ein ziemlich großes Ding, mit einer starken Verbindung zu Java3D (und einer 20-Seitigen installationsanleitung :wink: ). Dummerweise wird es von den Leuten entwickelt, die prinzipbedingt immer einen Vorteil gegenüber unsereins haben werden -_- Das ernsthaft mit Swogl vergleichen zu wollen wäre also … eher unangemessen… :rolleyes:

So, auch hier mal ein kleines Update:

Swogl 0.1 ist verfügbar

Unter http://swogl.javagl.de/ gibt es Swogl 0.1 zum download. Zusätzlich ein paar Screenshots und Demo-Applikationen. Z.B. einen Image-Browser, mit dem man die Bilder so ähnlich durchblättern kann wie die CD-Cover auf dem iPhone (zumindest so weit ich das in dem ca. 0.8 Sekunden dauernden Ausschnitt in der Werbung erkennen konnte)

http://swogl.javagl.de/ImageBrowserDemo01.png

und eine kleine Anwendung, die eigentlich nur eine kleine Spielerei sein sollte, die ich jetzt aber mal trotz einiger Hakeligkeiten mit hochgeladen habe: Eine Applikation, wo man in einem Buch (das nur aus drei Seiten besteht) blättern kann:

http://swogl.javagl.de/BookDemo02.png

Wie immer ist Feedback erwünscht :slight_smile:

Ach ja: Der Source Code von Swogl ist jetzt im JAR dabei. Einige hatten schon danach gefragt.

wow die Bilder sehen wirklich beeindruckend aus, beim Imagebrowser fehlen nur noch die Spiegelungen der Bilder dann siehts aus wie Coverflow (so heißt das bei Apple) :smiley:

:wink: Ja, dass es mit Spiegelungen richtig fett aussehen würde, habe ich mir auch gedacht, aber da müßte ich erstmal überlegen, die man das einbauen könnte - und bisher ist das ja noch keine „Anwendung“, sondern soll nur eine kleine Demo sein, und enthält noch einige Sachen, die man in einer richtigen Anwendung anders machen müßte.

Ein Problem ist eben, dass die Components alle unterschiedlich groß sein können, dass der Frame unterschiedlich groß sein kann, und dass es zwischen 1 und 100000 Components sein könnTen. In bezug auf die Größe hatten es die Apple-Leute ja leicht: Die Parameter so zu tweaken, dass es bei immer gleich großen Components und einem immer gleich großen Fenster „toll“ aussieht, ist nicht das Problem. Aber das so zu dengeln, dass es immer „toll“ aussieht, kann beliebig aufwändig sein…

Aber mal schauen, ob ich irgendwann die Zeit finde, einen allgemeingültigen, „schön“ implementierten, Swogl-basierten „JCoverFlow-ImageBrowser“ zu schreiben :slight_smile:

Naja bei Apple ist das nicht nur beim IPhone so sondern in fast allen Anwendungen gibts das ITunes, Finder, …
Da werden in der Regel nur ~10 Elemente dargestellt der Rest ist nicht zu sehen.

Ja, die Anzahl der Components ist ein eigener Punkt. Eigentlich wollte ich noch eine Beschränkung einbauen (im Moment braucht er halt schon SEHR viel Speicher, wenn man „viele“ Bilder lädt :wink: ) Aber das könnte man auch wieder sehr weit treiben: In einer echten Anwendung könnte man ja z.B. immer nur 10 Komponenten anzeigen, und vielleicht 20 im Speicher halten, und die 9980 Components die davor oder dahinter liegen „on the fly“ nachladen, wenn sie benötigt werden… Wie gesagt: Das ist nur eine Mischung aus „Test, ob es funktioniert“ und „Demo, was man irgendwann in Zukunft alles mit Swogl machen könnte“.

Ich muss mal sehen das ich wieder bisschen Zeit am PC verbringe, vielleicht kann ich das in meinem DB Designer oder wo anders verwenden.
Solltest du dafür irgendwie Webspace/SVN brauchen kann ich dich auf meinem Server unterbringen oder wenn du willst kann ich dir wie Beni hier nen Unterforum einrichten was du auch als Supportforum benutzen kannst.