2010-08-08 3 views

Antwort

4

Ich würde entweder mit Swing und Java2D oder OpenGL (JOGL) gehen.

Ich benutze OpenGL einige Male und Zeichnung Text ist einfach mit JOGL Erweiterungen (TextRenderer).

Wenn Sie Swing wählen, dann ist der schwierige Teil die Implementierung einer 3D-Transformation. Sie müssten eine Art Partikelsystem schreiben. Die Partikel müssten sich auf einer 3D-Kugel befinden. Sie wären persönlich verantwortlich für jede 3D-Transformation, aber mit einer orthogonalen Projektion, die trivial wäre. Es ist also eine schöne Übung - was Sie brauchen, ist hier: Wiki's spherical coord sys und hier 3d to 2d projection.

Nachdem Sie alle die Transformation gemacht nur Zeichnung bleibt übrig. Und Java2D und Swing haben dafür eine sehr praktische API. Es würde herunterkochen, um Schriftgröße auszuwählen und Text an gegebenen Koordinaten zu zeichnen. Benutzerdefinierte JPanel mit überschreiben paintComponent Methode wäre genug zu starten und zu beenden.

Wie für die zweite Wahl der schwierigste Teil ist OpenGL API selbst. Es ist verfahrenstechnisch, wenn Sie hauptsächlich mit Java vertraut sind. Sie würden es schwer haben, Nicht-OO-Zeug zu verwenden. Es kann sich daran gewöhnen und, um ehrlich zu sein, kann es sehr lohnend sein, da man viel damit machen kann. Wenn Sie OpenGL ausgewählt haben, erhalten Sie alle 3D-Transformationen kostenlos, müssen sich aber dennoch selbständig vom sphärischen Koordinatensystem in ein kartesisches transformieren (der erste Wiki-Artikel ist immer noch hilfreich). Danach ist es nur eine Frage der Verwendung einer Textzeichenklasse wie TextRenderer, die mit JOGL-Distribution geliefert wird.

So OpenGL hilft Ihnen mit Projektion Berechnungen und ist hardwarebeschleunigt. Das Java2D würde mehr Mathematik erfordern, aber meiner Meinung nach scheint dieser Ansatz etwas einfacher zu sein. Oh, und übrigens - das Java2D versucht, irgendeine Grafikbeschleunigung zu verwenden, die es (OpenGL oder DirectDraw) intern gibt. Sie sind also vor bestimmten Low-Level-Problemen geschützt.

Für beide Optionen müssen Sie auch Mauskoordinaten s an die Rotationsgeschwindigkeit der Kugel binden. Ob Java2D oder OpenGL, der Code sieht sehr ähnlich aus. Zeichnen Sie die Mauskoordinaten, die sich auf die Mitte des Panels beziehen, einfach auf einen Geschwindigkeitsvektor auf. Zum Zeitpunkt des Zeichnens können Sie den Vektor verwenden, um die Kugel entsprechend zu drehen.

Und noch etwas: Wenn Sie OpenGL ausprobieren möchten, würde ich empfehlen: Processing language erstellt am MIT speziell für reiche Grafik-Applets. Ihre 3D-API ist nicht zufällig, ist fast das gleiche wie OpenGL, aber ohne viel von der Gruft. Also, wenn Sie den schnellsten Prototyp wollen, ist das die beste Wette. Beraten Sie this discussion thread für aktuelles Beispiel. Hinweis: Die Verarbeitung wird in Java geschrieben.

+0

Vielen Dank für die ausführliche und hilfreiche Antwort! Entschuldigung, ich habe keinen ausreichenden Ruf für die Abstimmung :( Die Java2D-Lösung würde passen, aber ich brauche den Text anklickbar sein. Könnten Sie mir bitte sagen, bietet JOGL einige Mechanismen ermöglicht es, die Klicks auf gerenderten Text zu hören? Also - Ich werde auf einer Reise beginnen ... – xolmc

+0

Ja, es gibt eine spezielle Einrichtung - OpenGL Kommissionierung (siehe http://www.lighthouse3d.com/opengl/picking/). Es funktioniert, dass Sie einen bestimmten Namen festlegen Objekt und dann spezielle Render-Modus verwenden, um es zu identifizieren.Es kann ziemlich chaotisch werden, weil es sehr niedrige Ebene ist, aber ich habe es einige Male getan, so kann hilfreich sein, wenn nötig – Rekin

1

Warum nicht einfach download den Quellcode, und schauen? Selbst wenn Sie PHP nicht schreiben können, sollte es dennoch möglich sein, es zu lesen und herauszufinden, wie der Algorithmus funktioniert.

+0

Ich werde es tun, wenn es nicht weniger schmerzhaft ist :) Wie Java-Quelle. BTW, was Rendering-Technik könnten Sie vorschlagen - JPanel/JLabel oder möglicherweise OpenGL oder etw. sonst? – xolmc

+0

Es ist ein Flash-Film, die Quelle ist in ActionScript - nicht PHP. – Rekin

+1

Alternativ, 'svn co http: // svn.wp-plugins.org/wp-cumulus/trunk'. – trashgod

3

Das ist nicht wirklich 3D. Es gibt keine perspektivischen Transformationen oder Mapping der Text auf einige 3D-Form (wie etwa eine Kugel). Was Sie haben, ist eine Reihe von Strings, wobei jeder String eine zugehörige Tiefe (oder Z-Reihenfolge) hat. Strings "näher" zu Ihnen sind mit einem stärkeren Grauton und größerer Schriftgröße gemalt.

Die Bewegung jeder Saite beim Bewegen der Maus ist in der Tat eine 3D-Form, die wie ein schräger Kreis um ein festes Zentrum aussieht - wobei die Neigung davon abhängt, wo sich der Mauszeiger befindet.Das ist einfache Mathematik - wenn Sie es für eine Zeichenfolge herausfinden, finden Sie es für alle heraus. Und dann wäre das letzte Stück, die Stränge so zu streuen, dass sie sich nicht zu sehr überlappen, und jedem das Anfangsgewicht basierend auf ihrer Frequenz zu geben.

Das ist, was most of the code tut. Sie müssen also entweder rechnen oder das ActionScript blind in Java2D übersetzen. Und nein, JOGL ist nicht nötig.

+1

+1 Mathematisch Ihre Antwort scheint eine solide Basis zu haben. Werde es ausprobieren. Danke. – Favonius

Verwandte Themen