Einfache Engine für einfaches 3D gesucht

Knuffi

Mitglied
Erst mal ein kräftiges "Hallo" in die Runde, ich bin neu hier.

Ich habe mich ein wenig in Java eingearbeitet und habe nun vor, ein Programm für die Schule zu schreiben, das die Analytische Geometrie der Oberstufe umfasst (ich war schon lange auf der Suche nach sowas, bin irgendwann bei "Geo.exe" von www.emath.de gelandet, aber es gefällt mir von der Darstellung her nicht).

Also:
Punkte, Geraden, Ebenen und Kugeln erstellen, schneiden und dann natürlich auch in einem Koordinatensystem darstellen.

Die grundlegenden Sachen wie die Klassen für Punkt, Vektor, Gerade, Ebene und Kugel bekomme ich in den Griff, auch die Berechnung von eventuellen Schnitten sollte mich nicht vor unlösbare Probleme stellen.

Bei der Grafikdarstellung hapert es aber schon an der Frage: Was soll ich nehmen?

Nach einiger Recherchezeit läuft das ganze wohl auf OpenGL raus (was meint ihr dazu?).

Nur da gibt es ja auch nahezu abzählbar unendlich viele Möglichkeiten: JOGL LWJGL, jPCT, ...
Die meisten, die ich bisher gefunden habe, sind aber ziemlicher Overkill. Ich brauche keine Bewegung in meiner Darstellung und auch keine Physik-Engine.
Ich will nur die Objekte im Koordinatensystem ohne Texturen (Wireframe oder einfache Oberfläche, die vielleicht teildurchsichtig ist, damit man die anderen Objekte trotzdem sieht) darstellen und das Kosy mit der Maus drehen und eventuell mit dem Mausrad zoomen können.

Könnt ihr mir bei der Entscheidung helfen? Bitte in Erinnerung behalten, dass ich noch am Anfang der Lernkurve stehe. ;)

Edit: Noch was vergessen: Ich arbeite mit Swing und mein Editor ist Eclipse.
 
Zuletzt bearbeitet von einem Moderator:

Landei

Top Contributor
Warum nicht Java 3D? Das nimmt dir die ganzen Berechnungen ab, die du bei einem OpenGL-Wrapper selber machen müsstest, ist nicht auf Spiele spezialisiert und es gibt genug Tutorials und Dokumentation dazu.

Viel einfacher wird der Einstieg nicht werden, 3D ist nun mal ein komplexes Thema.
 

Knuffi

Mitglied
Ok, dann schaue ich mir Java 3D mal an. Ich hatte bisher nicht so viel darüber gelesen. Von den anderen Sachen gibt es irgenwie mehr Treffer bei Google ...
 

Marco13

Top Contributor
Du arbeitest also an einem zweiten CLUCalc :joke:

Java3D war ursprünglich von Sun, und wird jetzt ("nur"?) noch von der Community weiterentwickelt. Ich habe schon eine Weile nicht mehr "aktiv" damit gearbeitet, und es ist schwer, einzuschätzen, wie gut es für deine Zwecke geeignet ist, solange man die Ziele nicht kennt. Du solltest dir ggf. mal die ganzen Alternativen ( Java und 3D-Grafik - it's engine driven [whoopsie's homepage] ) ansehen, also erstmal nur grob, und jeweils vielleicht ein einfaches Beispiel ansehen, und ggf. ein "Minimalbeispiel" erstellen, das deine Anforderungen widerspiegelt (Koordinatensystem, vielleicht ein paar Pfeile, eine halbtransparente Ebene, Text, Mausinteraktion,... ) und schauen, wie gut das eine oder andere passt. Sich von Anfang an "unabrückbar" auf eine Technologie festzulegen, könnte ungünstig sein. Ich weiß nicht, was du erreichen willst, aber.... wenn ich so ein GeoAlgebra-Ding schreiben müßte, würde ich vermutlich zuerst mal überlegen, ob und inwieweit man vom Renderer abstrahieren könnte (aber da muss man aufpassen, dass man nicht "versehentlich" die ganze Arbeit in die Abstraktion steckt und nicht mehr zu dem kommt, was man eigentlich machen will ;) ). Der Grund dafür ist nicht zuletzt dass ja SEHR viel "Hirnschmalz" da reinfließen kann (eben alles was reine Modellbildung und Berechnungen sind), was nichts mit der eigentlichen Visualisierng zu tun hat.
 

Knuffi

Mitglied
Deswegen frag ich ja hier im Forum nach. ;)

Ich muss mich jetzt nicht auf eines festlegen, natürlich schau ich mir mal den Link und die dort angesprochenen Engines an.
Ein Engine, bei der ich nicht alles selber übernehmen muss, ist mir sogar wesentlich lieber.
 

Knuffi

Mitglied
So, nach längerer Zeit hatte ich wieder Gelegenheit, mich mit der Grafik auseinander zu setzen ... :rtfm:

Alles andere hab ich nun eigentlich im Griff, aber mit der Grafik hapert es gewaltig:

Problem 1: Ich suche eigentlich nur was "einfaches", das in einer Swing-Komponente läuft - und letzteres ist anscheinend schon sehr problematisch.
Problem 2: Die oben angeführten Dinger sind ziemlich "overdressed" und die Beispiele, Tutorials, Dokus laufen meist nicht auf das hinaus, was ich suche.

Ich habe mir JMonkey, Xith, jPCT, und sogar LWJGL und JOGL angeschaut (bei den beiden letzten bin ich nicht sehr weit gekommen :bahnhof: ). Meist scheitert es an der Integration in Swing, mit dem ich halt meine restliche GUI zusammensetze und die Grafik würde in einem Tab-Panel laufen.

Weiß denn keiner eine Schnittstelle zu 3D-Grafik (Direct3D oder OpenGL ist mir wurscht, die aktuellen Grafiktreiber können ja eh beides und die Performanz ist auch drittrangig, da ich ja keine 2000+ Triangles habe), die für meine Zwecke (Darstellung von Ebenen, Geraden und Punkten im Kosy mit Drehung des Kosys) geeignet ist?
 

Marco13

Top Contributor
Ja, stimmt schon, die Integration in Swing kann manchmal fummelig sein. Aber ... welche der Bibliotheken erschien dir denn (abgesehen von der Integration) am geeignetsten für das, was du vorhast?

Es ist nunmal meisten so, dass Grafik IMMER zu langsam ist. Keine full-fledged 3D-Grafikbibliothek wird sich rühmen mit "Ja, Punkte und Linien in 3D gehen, aber bitte nicht mehr als 500 Dreiecke, sonst wird's zu langsam". Die Prioritäten sind da vielleicht üblicherweise andere, als du für dein Projekt setzt. (Deswegen auch der Vorschlag, zu überlegen, inwieweit man vom Renderer abstrahieren kann).
 

Network

Top Contributor
Ich glaube du hast etwas zu hohe Anforderungen. Du willst eine möglichst Basic Grafikengine (OpenGL) die du aber möglichst schnell lernen kannst ohne Probleme (DirectX).

Die beiden Sachen schließen sich im Grunde schon aus.

Soweit ich weiss und korrigiert mich bitte, unterstützt Java3D sowohl OpenGL als auch DirectX je nach Platform. Jedenfals meine ich das gelesen zu haben.

Die einfachste Schnittstelle für OpenGL ist nunmal "LWJGL".

Auf der Website sind sogar Anfängertutorials die dir die Basics beibringen wie du LWJGL installierst und wie du deine ersten Objekte darstellen kannst!
Das ist am Anfang meist sehr verwirrend aber nach 2/3 Tagen weiss man schnell wies geht.

Das größte Problem wird wahrscheinlich die Kamera sein, mit der du dich durch die Welt bewegen kannst.
In LWJGL kannst du das mit 2 Zeilen Code machen und nie wieder darüber nachdenken. (Naja abgesehen von der Verarbeitung der Inputs). (Selbstverständlich gibt es solche einfachen Möglichkeiten auch in vielen anderen Schnittstellen.)

Raten würde ich dir erstmal dein "System" in 2D darzustellen. D.h. du schreibst ein Programm mit allen erforderlichen Mitteln, Berechnungen, Daten etc.... nur die Darstellung ist vorerst in 2D (Auch wenn man vieleicht nicht soviel sieht.)
Später kannst du dann immernoch das ganze mit einer 3D Anzeige austauschen, was schließlich der Vorteil von OO-Sprachen ist ;)
OpenGL bietet nebenbei natürlich auch eine 2D-Darstellung an. Das wäre natürlich geschickt wenn du erstmal OpenGL in 2D verwendest. Dann lernt man auch viel eher das Prinzip was dahinter steckt und man muss sich nicht gleich mit dem ganzen 3D Mist rumschlagen ;)

Gruß
Network

PS: @Marco13: 500Dreiecke sind aber eig. relativ wenig. Das entspricht weniger als 42 Würfel in OpenGL und weniger als 21 ohne BackfaceCulling ;) Es sind schon um ein sehr großes Vielfaches mehr bevor ein heutiger Computer einknickt ;)
 
Zuletzt bearbeitet:

Knuffi

Mitglied
Prinzipiell gefällt mir jPCT am besten, da hatte ich zumindest schon die primitiven Objekte wie Box, Sphere, usw.
LWJGL finde ich sehr schwierig für den Anfang.
jME ist auch nicht so schwer, aber halt sehr überdimensioniert.

@Marco: Was meinst du mit "vom Renderer abstrahieren"?
 
Zuletzt bearbeitet:

Marco13

Top Contributor
@Network: Bei den Low-Level-Bibliotheken, speziell eben JOGL und LWJGL, ist der Aufwand schon sehr hoch, und die Lernkurve am Anfang IMHO schon ZU steil - d.h. man kann praktisch nichts damit anfangen, außer Tutorials mit möglichst vielen Snippets suchen, aus denen man sich dann (mit viel Trial & Error und geradezu unerschöpflichem Frustrationspotential) dass zusammenklamüsert, was man eigentlich will. Das bezieht sich hauptsächlich auf GL >= 3.1. Früher konnte man ja noch das Redbook durcharbeiten und wußte dann grob, was Sache ist, aber seit 3.1 ist's IMHO schon arg unübersichtlich geworden (siehe auch http://www.java-forum.org/plauderecke/91305-meinung-opengl-3-1-a.html#post578325 ).
Das mit den 500 Dreiecken bezog sich darauf, dass man vielleicht eine schöne, intuitive, schlanke 3D-Lib bauen könnte, die genau den Anforderungen des Threaderstellers entspricht - aber solange man nicht mit VBOs, PBOs, RBOs und VAOs rumhantiert kann man nicht erwarten "die Maximale Performance" zu erreichen.
Zum Glück gibt es einige, die den Spagat zwischen Effizienz und einfacher Verwendbarkeit halbwegs schaffen.

@Knuffi: Mit "vom Renderer abstrahieren" meinte ich, dass man eben nicht in seiner Main-Klasse erstmal JPCT oder LWJGL mit seinem "Display" hochfährt. Und speziell auch, dass man NICHT in seine eigenen Modellklassen ("Line", "Point", "Arrow"...) Methoden einbaut wie "paintThisInSomeOpenGLContextUsingThisAndThatShader". Wie schon oben angedeutet, ist es schwer, zu sagen, wie weit man bei dieser Trennung/Abstraktion gehen könnte oder sollte. Aber statt sowas zu machen wie
Java:
class Line
{
    // Fields die Line eben so hat:
    Point p0;
    Point p1;

    // Fields, die höchst-spezifisch für den verwendeten Renderer sind
    JMonkeyEngineEntity lineEntity;
    JMonkeyEngineMaterial material;       

    // Methoden, die Line eben so hat
    Point intersect(Line other) {...}

    // Methoden die höchst-spezifisch für den verwendeten Renderer sind
    void renderThisInto(JMonkeyEngineRenderContext c) {... }
    void setMaterial(JMonkeyEngineMaterial m) {... }
}
könnte/sollte man versuchen, das zu trennen
Java:
class Line
{
    // Fields die Line eben so hat:
    Point p0;
    Point p1;

    // Methoden, die Line eben so hat
    Point intersect(Line other) {...}
}

class JMonkeyEngineLine
{
    private Line line; // Vielleicht ...

    // Fields, die höchst-spezifisch für den verwendeten Renderer sind
    JMonkeyEngineEntity lineEntity;
    JMonkeyEngineMaterial material;       

    // Methoden die höchst-spezifisch für den verwendeten Renderer sind
    void renderThisInto(JMonkeyEngineRenderContext c) {... }
    void setMaterial(JMonkeyEngineMaterial m) {... }
}

Um dann später eine Klasse zu haben, mit der man Linien rendern kann
Java:
class AbstractLineRenderer
{
    public abstract void renderAllLines();
    ...
}

Und sich aussuchen kann, welche genau man dort verwendet
Java:
class JMonkeyLineRenderer extends LineRenderer
{
    JMonkeyRenderContext context;

    @Override
    public void renderAllLines()  
    {
        for (Line line : lines)
        {
            JMonkeyEngineLine rendered = getFor(line);
            rendered.renderThisInto(context);
        }
    }
}

ACHTING: Das ist natürlich hyper-plakativ! In Wiklichkeit kann so eine Abstraktion ziemlich aufwändig sein. Aber sie könnte eben den Vorteil haben, dass deine eigentlichen "Kern-Klassen" nichts enthalten, was spezifisch für die Renderer-Bibliothek ist (und im Idealfall wirklich nicht wissen, OB und WIE sie dargestellt werden).

Allgemein ist so eine Trennung von Modell und Präsentation schon Standard und nie verkerhrt (Stichworte "Model-View-Controller" / "Model-Presenter"). Bei dem Programm, wie du es angedeutet hast, könnte es sein, dass das Aufwand/Nutzen-Verhältnis dieser Trennung zwischen "Modell" und "Rendering" geringer ist, als in anderen Fällen. Aber da keiner genau weiß, was du vorhast, solltest du auf jeden Fall überlegen, ob es dir (auch wenn es etwas aufändiger ist) nicht vielleicht eine Flexibilität und nicht zuletzt eine "Sauberkeit der Architektur" (im Hinblick auf klare Trennung von Rollen und Aufgaben der einzelnen Klassen, im Sinne einer "Separation of Concerns") bringt, die es wert ist.
 

Knuffi

Mitglied
Interessant :)

Genau das schwebte mir von Anfang an vor. Ich habe Klassen für Punkte, Vektoren, Geraden, Ebenen und Kugeln. Die haben erst mal gar nichts mit der Grafik zu tun. Eventuell baue ich noch ein paar Eigenschaften ein, die die Darstellung dann später vereinfachen (falls die 3D-Engine ein seltsames Kosy hat, muss man ja einiges würfeln), ansonsten sollte die Darstellung aber schon einer eigenen Klasse überlassen werden.

Dann weiß ich zumindest, dass ich auf dem richtigen Weg bin ... *seufz* ich vergrab mich dann halt mal in jPCT und oder JME
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
mihe7 Wie man einfache Spiele programmieren kann Spiele- und Multimedia-Programmierung 23
Taschentuch9 Einfache fertige Schach AI gesucht Spiele- und Multimedia-Programmierung 3
D einfache 2D Grafik in JAVA. absoluter Anfänger Spiele- und Multimedia-Programmierung 5
D Einfache Physik (Beschleunigung) Spiele- und Multimedia-Programmierung 6
B Einfache Animationen darstellen Spiele- und Multimedia-Programmierung 12
C 3d Engine : Fragment Shader , aber wie? Spiele- und Multimedia-Programmierung 17
C 3d Game Engine : PERFORMANTE Räumliche Verdeckung Spiele- und Multimedia-Programmierung 5
C Eine eigene 3d Engine : Shader - aber wie ? Spiele- und Multimedia-Programmierung 2
E 3D Engine Spiele- und Multimedia-Programmierung 5
R Vererbbarer GameLoop für Engine Spiele- und Multimedia-Programmierung 14
V Suche 2D Engine Spiele- und Multimedia-Programmierung 11
S Engine2D - Java 2D Engine Spiele- und Multimedia-Programmierung 20
D Physik Engine und Collision Spiele- und Multimedia-Programmierung 5
R Ratschlag für 2D-3D Engine für die Spieleentwicklung gesucht Spiele- und Multimedia-Programmierung 4
M [JME3] Jmonkey Engine und Wavefront import aus Blender Spiele- und Multimedia-Programmierung 3
N Eigene Java 3D Engine erstellen. Spiele- und Multimedia-Programmierung 11
K Game Engine für selbstprogrammiertes Spiel Spiele- und Multimedia-Programmierung 27
Luk10 Tipps für bessere Animationen / Grafik Engine Spiele- und Multimedia-Programmierung 2
X Möglichst komplette 2D Game Engine? Spiele- und Multimedia-Programmierung 12
T Ist meine Jump and Run Engine zu genau? Spiele- und Multimedia-Programmierung 4
J 2D-Game-Engine? Spiele- und Multimedia-Programmierung 2
N 1600 Zeilen Engine Spiele- und Multimedia-Programmierung 23
R Physics Engine benutzen Spiele- und Multimedia-Programmierung 11
Steev EGE - Easy Game Engine Spiele- und Multimedia-Programmierung 2
Developer_X Java Mokey Engine Spiele- und Multimedia-Programmierung 7
G kleine "2d" Physik Engine Spiele- und Multimedia-Programmierung 3
M Gibt es ein deutsches Board für die jmonkey engine? Spiele- und Multimedia-Programmierung 7
Landei jMonkeyEngine als 3D Engine Spiele- und Multimedia-Programmierung 12
R Grafik-Engine? MemoryImageSource? Spiele- und Multimedia-Programmierung 10
U 3D Engine und anderes Spiele- und Multimedia-Programmierung 4
sparrow 3D-Game-Engine Spiele- und Multimedia-Programmierung 20
M Welche ist die beste Java3D-Engine Spiele- und Multimedia-Programmierung 15
B Schnelle 3D-Engine gesucht Spiele- und Multimedia-Programmierung 2
N Minecraft Frage für einen Minecraft Server Spiele- und Multimedia-Programmierung 2
Drachenbauer Speicher-Tool für ein Spiel schreiben Spiele- und Multimedia-Programmierung 13
B Deepmind Poker Bot für PokerStars konfigurieren? Spiele- und Multimedia-Programmierung 2
G Minecraft PlayerBot (Listener Thread für jeden Spieler?) Spiele- und Multimedia-Programmierung 3
K Wie bekomme ich eine Transition für alle Objekte zum stoppen? Spiele- und Multimedia-Programmierung 1
E Organisation für Game Spiele- und Multimedia-Programmierung 1
Excess Ballerfisch für Android Spiele- und Multimedia-Programmierung 3
coolian ich brauche irgendeine gui lib für lwjgl2 Spiele- und Multimedia-Programmierung 51
krgewb Anderer Algorithmus für Bounding Box Spiele- und Multimedia-Programmierung 9
MiMa MP3 Dateien für Metadaten abgleichen Spiele- und Multimedia-Programmierung 0
Freshy Bot für Discord Spiele- und Multimedia-Programmierung 61
R Ideen für die Backend-Entwicklung eines Games gesucht Spiele- und Multimedia-Programmierung 8
G Mikrophon-/Audiosteuerung für einen Character Spiele- und Multimedia-Programmierung 1
P Tennis- Spielstand- Zähler für Schule programmieren Spiele- und Multimedia-Programmierung 6
M Logik für ein Quiz Spiele- und Multimedia-Programmierung 7
P Hilfe für Seminar Arbeit Spiele- und Multimedia-Programmierung 9
MiMa Metadaten für Multimedia Daten ermitteln Spiele- und Multimedia-Programmierung 4
G Übungsprogramm für Matheaufgaben Spiele- und Multimedia-Programmierung 1
F Algorithmus für bessere Kollisionsabfragen Spiele- und Multimedia-Programmierung 10
S Bilder Für Schachfiguren Spiele- und Multimedia-Programmierung 14
Timo_neu_in_java Suche etwas einfaches für Anfänger Spiele- und Multimedia-Programmierung 6
I Minecraft Suche Plugin Developer für Minecraft Netzwerk! Spiele- und Multimedia-Programmierung 2
S GUI erstellen für Text Adventure Spiele- und Multimedia-Programmierung 4
S Eigene Klasse vec_t - 3 oder 4 Einheiten für x, y, z und w Spiele- und Multimedia-Programmierung 11
J Vektor für Gravitation erzeugen Spiele- und Multimedia-Programmierung 34
I Minecraft: Craftingrecipe für Braustand ändern Spiele- und Multimedia-Programmierung 9
Z Minimax-Algorithmus für TicTacToe Spiele- und Multimedia-Programmierung 5
H KI für Spiele Spiele- und Multimedia-Programmierung 1
S Pssende Datenstruktur für ein Netz Spiele- und Multimedia-Programmierung 5
S MouseEvents für Sprites Spiele- und Multimedia-Programmierung 3
I Spectator Modus für Spiel ähnlich zu Terraria Spiele- und Multimedia-Programmierung 8
K Bestes Bildformat für Spielegrafiken und deren Einbindung in Java Spiele- und Multimedia-Programmierung 2
J mehrere Listener für einen Button / Label Spiele- und Multimedia-Programmierung 1
C Port umleiten: lesen und schreiben für MCServer-Client über Skype Spiele- und Multimedia-Programmierung 0
J Musik Bibliothek für GUI Spiele- und Multimedia-Programmierung 7
B Hauptmenü für Spiel Spiele- und Multimedia-Programmierung 1
Androbin KI für Verfolgung im Raster Spiele- und Multimedia-Programmierung 2
A Bot für Browsergame Spiele- und Multimedia-Programmierung 2
H Tutorials für Fortgeschrittene 3D-Anwedungen Spiele- und Multimedia-Programmierung 2
lord239123 suche Graphiker für ein Pokemon-Spiel Spiele- und Multimedia-Programmierung 6
Furtano Vektoren für Bewegung für eine 2D-Simulation Spiele- und Multimedia-Programmierung 3
T Sinusgenerator für eine Hp Spiele- und Multimedia-Programmierung 8
J Menü für Snakespiel in einzelnem JFrame Spiele- und Multimedia-Programmierung 5
M Minecraft weitere Java Entwickler für minecraft projekt gesucht Spiele- und Multimedia-Programmierung 0
Guybrush Threepwood Ketzerische Frage: Opus-Codec für Java Spiele- und Multimedia-Programmierung 14
L Hilfe bei Klassendesign für Spiel Spiele- und Multimedia-Programmierung 2
N Animationen für ein 2D game Spiele- und Multimedia-Programmierung 6
S Aufbau für 2D Spiele Spiele- und Multimedia-Programmierung 7
L Client für ein Browsergame Spiele- und Multimedia-Programmierung 21
Devil0s Swing Elemente für Inventar? Spiele- und Multimedia-Programmierung 9
Kenan89 Ansatzfrage: Kartenspiel für 2 Spieler Online Spiele- und Multimedia-Programmierung 3
F Ideen für spiel Spiele- und Multimedia-Programmierung 4
P Spielfeld für RPG Spiele- und Multimedia-Programmierung 15
Hoppelmann Alphamap (Bild) für 3D-Terrain generieren Spiele- und Multimedia-Programmierung 2
S Algorithmus zur Ressourcesuche für die KI Spiele- und Multimedia-Programmierung 5
M Farbwerte für Flächen aus einem Bild erkennen Spiele- und Multimedia-Programmierung 3
C KI für Skatspiel - Wie können die Computerspieler eigenständig handeln? Spiele- und Multimedia-Programmierung 10
S Aufbau von Klassen für Spiel Spiele- und Multimedia-Programmierung 13
Kenan89 Kleines Projekt für Java Spiele- und Multimedia-Programmierung 5
M Empfehlungen für ein 2D-Jump'n'run Spiele- und Multimedia-Programmierung 4
A Grundlagensuche für Spiel Spiele- und Multimedia-Programmierung 8
C Wo ist der MP3 Plugin für JMF? Spiele- und Multimedia-Programmierung 3
qwerqer Design Pattern gesucht für Spielregeln Spiele- und Multimedia-Programmierung 2
M Java als Programmiersprache für kommerzielle Spieleentwicklung? Spiele- und Multimedia-Programmierung 3
Y Warum Thread für Spieleprogrammierung? Spiele- und Multimedia-Programmierung 27
A Music für Android game Spiele- und Multimedia-Programmierung 3
Gossi Probleme beim Laden der Images aus dem "Tutorial für Java-Spiele" Spiele- und Multimedia-Programmierung 4

Ähnliche Java Themen

Neue Themen


Oben