Swing Kugel/Sphäre programmieren

no00nerd

Mitglied
Hi, wisst ihr vielleicht, wie man eine halbtransparente Kugel bzw. Sphäre programmieren könnte, mit Swing?

Sollte ungefähr so aussehen wie in der Abbildung:

IMG_20230106_204316.jpg
 

White_Fox

Top Contributor
Uh...Swing kann doch nur zweidimensional, oder?
Ich würde mal schauen, ob du was mit OpenGL machen kannst.

Mehr als dieses Stichwort habe ich aber leider auch nicht zu liefern, aber das wäre das erste womit ich anfangen würde.
 

no00nerd

Mitglied
Jup, Swing kann nur zweidimensional... Aber ich könnte doch theoretisch auch mit zweidimensionalen "Formen/ Zeichnungen" dreidimensional zeichnen? Das müsste doch durch Transposition oÄ möglich sein. (Also quasi einen Teil von OpenGL nachbauen. :D ) nur halt nicht auf der graka...
 

KonradN

Super-Moderator
Mitarbeiter
Also generell kann jede Software nur 2D Anzeigen, denn das ist die Limitierung der Hardware.

Wenn Du keine Software nutzen willst, die diese Transition von 3D auf 2D macht, dann kannst Du das dir auch selbst überlegen.

Das Prinzip kann man sich erst einmal überlegen, in dem man sich eine Transition von 2D zu 1D überlegt. Also sowas wie ein Querschnitt durch eine Szene.

Da kann man sich dann einen Zettel nehmen und darauf Malen.
Es gibt z.B. ein 4 Eck auf der rechten Seite - das sei ein Schnitt durch einen Würfel.

Dann hast du links irgendwo ein Punkt. Das ist dann sozusagen die Kamera.. damit kann man erste Linien einzeichnen von der Kamera hin zu den einzelnen Punkten.

Der Bildschirm ist dann ein Strich zwischen Kamera und dem Objekt. Und da kann man dann Schnittpunkte der Linien sehen. Das wären dann die dargestellten Punkte.

Man kann also jetzt berechnen aus den Koordinaten der Kamera und des 2D Objektes, ob und wo die Linie des Bildschirms gekreuzt wird. Und damit kommt man zu einer Bildschirmkoordinate.

Das ist die reine Theorie der Transition. Das, was man da aufbaut, das muss man bei 3D zu 2D halt für x und y machen.

Das ist aber alles noch nicht komplett. Du brauchst auch Berechnungen über den Rand hinaus, denn du willst ja Objekte malen, die nur teilweise sichtbar sind. Das ist aber einfach - wenn ein Objekt sichtbar ist, dann berechnest du alle Koordinaten aller Punkte - auch wenn sie außerhalb sind. Das Graphics2D Objekt kann damit umgehen/

Aber wichtiger ist: du hast Punkte, die nicht sichtbar sind. Du musst also in dem Beispiel prüfen, ob die Linie der Sicht eine Verbindungslinie kreuzt. Dann wäre es nicht sichtbar. Da müsste man aber schauen, ab wo etwas sichtbar wird. Das ist schwierig, daher ist hier der Ansatz, dass du alles Malst aber in einer Reihenfolge von hinten nach vorne. Du prüfst also den Abstand der Punkte von der Kamera und fängst mit den Verbindungslinien an, dessen Punkte am weitesten entfernt sind (also das einen Punkt hat, der am weitesten weg ist).

Das ist ein erster Anfang,. Damit hast du dir die Möglichkeit geschaffen, 3D Objekte in 2D darzustellen. Aber bisher hast du Flächen nur gefüllt. Du hast da also noch nichts mit Farbverläufen und so.

Dazu kann man dann hingehen und sich überlegen, wie denn eine rechteckige Fläche sich verzerrt um dann Bilder entsprechend verzerrt dazustellen.

An der Stelle sind wir aber immer noch nicht fertig. Bei so einem Bild kommt noch mehr hinzu:
  • Kugeln - da kann man sich überlegen, wie man das handhaben will.
  • Licht - das ist eigentlich das Vorgehen der Kamera noch einmal: Du hast einen Punkt, Licht ausstrahlt und das dann die 3D Objekte trifft. So kann man dann Helligkeitswerte bestimmen die dann die Darstellung beeinflussen.

Damit könntest du dann so eine Library selbst schreiben: dazu finden sich bestimmt auch Bücher und Blogs, die sowas beschreiben. Und es gibt fertige Libraries, die genau sowas machen.

Das ist halt jetzt nur ein sehr kleiner Auszug aus dem, wie sowas ablaufen kann.
 

KonradN

Super-Moderator
Mitarbeiter
Raytracing? Kann mich noch daran erinnern. Auf dem Amiga hat es mehrere Stunden gedauert so ein Bild zu berechnen.
Ja, wobei man am Anfang ja klein anfängt, z.B. zwei Würfel und die können sich dann z.B bewegen und frei drehen. Dann darf die Kamera sich frei bewegen und drehen und dann darf der Abstand Bildschirm zu Kamera sich noch ändern…

Das geht sehr gut auch ohne beschleunigte Darstellung der GraKa.
 

temi

Top Contributor
Ja, wobei man am Anfang ja klein anfängt,
Darüber bin ich nie hinaus gekommen. War mir zu langweilig mehrere Stunden auf ein Bild zu warten. Ich glaub ich hab nicht ein einziges vollständig berechnen lassen. Das waren noch Zeiten. ;) Hätte man damals schon ein aktuelles 3D-Spiel gesehen, wäre man vom Glauben abgefallen.
 
Zuletzt bearbeitet:

White_Fox

Top Contributor
Jup, Swing kann nur zweidimensional... Aber ich könnte doch theoretisch auch mit zweidimensionalen "Formen/ Zeichnungen" dreidimensional zeichnen? Das müsste doch durch Transposition oÄ möglich sein. (Also quasi einen Teil von OpenGL nachbauen. :D ) nur halt nicht auf der graka...
Ja...theoretisch kannst du das machen. Praktisch wirst du da aber sehr, sehr viel Zeit investieren müssen, wahrscheinlich weitaus mehr Zeit als du für den Rest deines Programms brauchen würdest.

Mach doch einfach mal folgendes: Stelle statt der Kugel einfach einen Kreisring mal dreidimensional da. Kreisringe hast du da ja auch in deiner Weltkugel. Wenn du Farbe haben willst, mach den Kreisring mit Farbverläufen.

Übriges: Die Kontinente wirst du nicht so einfach mit gängigen Formen wie Sphären und Kuben nachbauen können. Das wird wahrscheinlich so schon trickreich genug, wenn du OpbenGL verwendest und einfach die Vorarbeit anderer Leute nutzt. Andererseits: Vielleicht hat jemand sowas ähnliches in OpbenGL schonmal gemacht.
 

KonradN

Super-Moderator
Mitarbeiter
Übriges: Die Kontinente wirst du nicht so einfach mit gängigen Formen wie Sphären und Kuben nachbauen können. Das wird wahrscheinlich so schon trickreich genug, wenn du OpbenGL verwendest und einfach die Vorarbeit anderer Leute nutzt. Andererseits: Vielleicht hat jemand sowas ähnliches in OpbenGL schonmal gemacht.
Wäre das nicht ‚einfach‘ eine Kugel mit einer Oberfläche dessen Textur teilweise transparent ist?

Da ist das Problem vermutlich eher, dass die Weltkarte erst einmal verzerrt dargestellt ist und man diese aufbereiten muss, damit sie wieder auf den Globus als Textur aufgebracht werden kann. Aber da muss man sich dann im Detail mit beschäftigen - da findet sich ja online eigentlich alles. Der erste Schritt wäre erst einmal die Grundlegende Funktionalität. Neben der Mathematik ist die Frage auch immer, wie man das darstellt in dem Model. Mein Ansatz damals war eine Darstellung über Polygone … es gab also nur gerade Flächen und eine Kugel wurde dann halt mit n Polygonen dargestellt. Mit n >= 8 aber halt Sinn machte es erst mit n> 100 denn bei 6 hatte man ja nur einen Würfel, da war also keine Kugel erkennbar.
(Tipp: ich habe keine beliebige n zugelassen. Man muss ja einen Algorithmus finden und da kann man sich beliebige Regeln überlegen für die Anzahl der Punkte und wie diese Flächen aufspannen)
 

White_Fox

Top Contributor
Wäre das nicht ‚einfach‘ eine Kugel mit einer Oberfläche dessen Textur teilweise transparent ist?
Ganz am Ende des Tages: sicherlich, darauf läuft es hinaus.

Aber sag der Kugel erstmal, wo sie transparent sein soll und wo nicht. Wie gesagt, wahrscheinlich hat das schonmal jemand gemacht, ansonsten wird es interessant, z.B. eine 2D-Karte auf einer Kugeloberfläche zu projezieren.
 

KonradN

Super-Moderator
Mitarbeiter
Aber sag der Kugel erstmal, wo sie transparent sein soll und wo nicht.
Das wäre aber doch Sache der Textur. Die ist dann halt an diversen Stellen transparent. Somit ist es "nur" ein Malen der einzelnen Flächen entlang der Z-Achse (von der entferntesten Fläche hin zu den den Kamera nächsten Flächen).

wahrscheinlich hat das schonmal jemand gemacht
Da dürdften die 3D Libraries alles haben, die so für Spiele üblich sind, denn da geht es ja Objekt, welche mit Texturen versehen sind und die dann dargestellt werden. Die Mathematik der Körper ist dabei noch relativ einfach. Problematischer wird es, wenn man Texturen verzerrt darstellen muss. Aber das ist dann auch "nur" eine Transition von Punkten sowie einer Berechnung von Pixeln (Du hast halt teilweise mehrere Textur-Pixel, welche auf ein Pixel gemappt werden müssen. Da muss man sich ein Algorithmus überlegen. Aber da man bei der Kugel keine Farben sondern nur Helligkeiten hat, dürfte das nicht zu wild sein. Da kann man ja ansonsten mit diversen Algorithmen herum probieren. Es geht ja nicht zwingend um eine realistische Darstellung sondern es soll einfach gut aussehen. Da kann man also bestimmt gut spielen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Eine Kugel nach rechts bewegen AWT, Swing, JavaFX & SWT 5
C Kugel diagonal laufen lassen AWT, Swing, JavaFX & SWT 31
I Kugel AWT, Swing, JavaFX & SWT 9
H RPG Programmieren, label.setLocation funktioniert nicht AWT, Swing, JavaFX & SWT 7
H LayoutManager RPG Programmieren, eigenes Spielfeld grafisch generieren aus Tileset AWT, Swing, JavaFX & SWT 18
T Button für GUI programmieren AWT, Swing, JavaFX & SWT 1
T Wie kann man in java aufwendige grafiken programmieren AWT, Swing, JavaFX & SWT 1
A 2D-Grafik Sprung programmieren AWT, Swing, JavaFX & SWT 35
M Nutzer interface Programmieren AWT, Swing, JavaFX & SWT 2
J Kleines Helikopterspiel programmieren AWT, Swing, JavaFX & SWT 2
R kleinen JPanelEditor programmieren AWT, Swing, JavaFX & SWT 3
C Gesucht: Hilfe beim programmieren. AWT, Swing, JavaFX & SWT 1
C Hilfe beim programmieren mit studiumgebundenes Projekt AWT, Swing, JavaFX & SWT 1
2 Senso bzw SimonSays programmieren AWT, Swing, JavaFX & SWT 8
T Möchte Android-ähnlich programmieren AWT, Swing, JavaFX & SWT 7
R Eclipse GUI Programmieren AWT, Swing, JavaFX & SWT 8
I LookAndFeel HTML Auflösung - Online Editor programmieren AWT, Swing, JavaFX & SWT 2
J 2D-Grafik Menü programmieren AWT, Swing, JavaFX & SWT 2
J Swing Landkarte mithilfe von Swing programmieren AWT, Swing, JavaFX & SWT 4
T Kleinen "Gui Builder" programmieren AWT, Swing, JavaFX & SWT 12
SexyPenny90 Wie Ball programmieren, der im 4 Eck rum fliegt AWT, Swing, JavaFX & SWT 7
I Rechner programmieren AWT, Swing, JavaFX & SWT 6
F UI Toolkit programmieren AWT, Swing, JavaFX & SWT 9
3 Eigenes Frame/Window programmieren AWT, Swing, JavaFX & SWT 2
S Desktop Programmieren AWT, Swing, JavaFX & SWT 2
A Programmieren einer Agenda mit einer Liste (als Applet und .txt zum Speichern) AWT, Swing, JavaFX & SWT 7
C Swing Orderbook programmieren AWT, Swing, JavaFX & SWT 6
B Editor programmieren AWT, Swing, JavaFX & SWT 26
LittleJavaCup Suchmaschine programmieren (wie bei Windows) AWT, Swing, JavaFX & SWT 2
T AWT verschiedene Oberflächen programmieren AWT, Swing, JavaFX & SWT 5
vandread Swing Probleme mit "Game of Life" programmieren AWT, Swing, JavaFX & SWT 8
J Modelleisenbahn - Kontroll-Tafel programmieren AWT, Swing, JavaFX & SWT 3
L Regler in Java Programmieren AWT, Swing, JavaFX & SWT 12
I Preisvergleich programmieren AWT, Swing, JavaFX & SWT 4
P Swing Roter Faden beim Applet GUI Programmieren AWT, Swing, JavaFX & SWT 2
J FAQ programmieren, welche Swing-Elemente AWT, Swing, JavaFX & SWT 7
G GUI - Inhalte wechseln (Eingabe-Assistenten programmieren) AWT, Swing, JavaFX & SWT 2
C Zeitplaner: Terminblock programmieren AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen

Neue Themen


Oben