3D Object Viewer

Shaguar

Mitglied
Hi zusammen,

ich sitze gerade daran einen 3D Object Viewer zu erstellen.
Es sollen einfache 3D Objekte geladen werden, zB Möbel, diese dann durch Rotation betrachtet werden und zusätzlich deren Textur geändert werden können.
Ich benutze vorerst dafür Java 3D, bin aber was das angeht noch nicht endgültig festgelegt.
Momentan habe ich das laden von *.obj, *.lwo etc Daten hinbekommen und das die Objekte mit der Maus gedreht werden können. Als nächstes möchte ich erreichen das einzelne Flächen der Möbel anklickbar sind und danach über eine Dropdownliste (oder ähnliches) eine neue Textur ausgewählt werden kann und diese anschließend auf dem 3D Objekt live übernommen wird.
Wenn ihr mir dazu irgendwelche Einsteiger Tipps hättet wäre das super, denn ich habe bisher noch keine Quellen gefunden wo so etwas ähnliches erklärt wird.
Also bei folgenden Sachen habe ich meine Probleme:
-Definierte Flächen des Models sollen einen Hover-Effekt bekommen, damit man merkt das sie anklickbar sind.
-Nach dem Anklicken soll sich irgendwo eine Texturauswahl öffnen
-Die Textur soll nach dem Auswählen übernommen werden.

Ich bräuchte irgendwelche Quellenangaben wo ich soetwas recherchieren könnte oder gerne auch direkte Hilfe wenn sich jemand mit diesem Thema auskennt.
In allen Büchern die ich bisher zu diesem Thema gefunden habe geht es eig immer eher um Grafikprogammierung wie Bewegungen, Partikeleffekte etc. Aber sowas brauche ich überhaupt nicht.

Danke schon mal im Vorraus.

Ps: Wenn jemand den Quelltext sehen will, von dem was ich bisher habe, dann einfach bescheid sagen.

Mfg
 

Shaguar

Mitglied
Kennt denn niemand irgendwelche guten Bücher oder Tutorials im Internet oder Videos auf Youtube etc zu diesem Thema?
Wie gesagt wenn es nicht Java 3D ist macht das auch nichts, ich wäre auch für Quellen zu JOGL oder LWJGL oder von mir aus auch Flash sehr dankbar.
 

Marco13

Top Contributor
Das Beschriebene ist einfach eine sehr spezielle Anwendung - die nichts mit dem zu tun hat, was die meisten Leute als erstes in 3D machen: Spiele :D Rundsätzlich muss man wohl zusehen, wie man überhaupt "Flächen" definieren kann (in der OBJ-Datei steht ja erstmal nur Polygon-Matsch - da wird man noch Zusatzinfos brauchen). Dann muss man erkennen, dass man mit der Maus über so einer Fläche ist, irgendwie mit einem PickCanvas, und dann das aussehen ändern, d.h. dem Objekt (der Fläche!) eine andere Appearance geben. Ein Video-Tutorial: "Wie man das Möbel-Design-Ding programmiert, das Shaguar braucht" wird man wohl kaum finden ;)
 

Shaguar

Mitglied
Da hast du vermutlich Recht.
Aber ein paar Sachen habe ich ja schon herausgefunden.
Die Objekte liegen ja bereits als 3D Modelle vor, obj oder als lwo Dateien.
Diese Objekte sind bereits in Flächen gegliedert, wie zB Sitzfläche, Armlehnen, Rückenlehne, Fahrgestell etc (bei einem Stuhl).
In Java 3D kann ich nun diese Objekte mittels
Java:
ObjectFile file = new ObjectFile(ObjectFile.RESIZE);
        Scene scene = file.load(new FileReader(location));
laden und kann mir dann mit
Java:
Map<String, Shape3D> nameMap = scene.getNamedObjects();
nameMap.get("Sitzflaechen_Bezeichnung");
die einzelne Komponenten herausholen und manipulieren.
Desweiteren habe ich ein bisschen mit dem PickMouseBehavior herumexperimentiert, und man kann auch mehr oder weniger schon einzelne Teile anklicken und dies wird auch registriert. Aber noch relativ ungenau, habe mir sagen lassen das das was mit den Ray Casting Einstellungen zu tun hat. Und wie man ein MouseOver Element realisiert habe ich auch noch nicht herausgefunden, bzw wie man dann die Beleuchtung für eine einzelne Fläche verändern kann (oder wie man auch sonst einen Hover-Effekt hinbekommt).
Die Texturauswahl müsste auch nicht zwingend in das Canvas3D Objekt gezeichnet werden sondern könnte zur Not auch getrennt in einem extra Panel im Frame angezeigt werden, hätte dann somit nichts mehr mit dem Java 3D zu tun.
Zum Texturenproblen habe ich noch nichts getestet bisher, aber ich denke da ich die Flächen einzeln ansprechen kann dürfte das Ändern der Texturen kein allzu großes Hinderniss sein, da es generell für Texturen in Java3D genügend Hilfsmaterial im Internet gibt.
Wie man erkennt, sieht mein Problem also gar nicht mehr so schlimm und spezifisch aus.
Es fehlt nur noch ein bisschen was an Fachwissen.
 

Shaguar

Mitglied
Also ich habe mir überlegt das ganze doch ein wenig anders zu machen.
Mal angenommen ich verzichte auf das drehen von Objekten (auch wenn das nicht schwer zu implementieren ist) und auch auf das ändern von Texturen, zumindest die Live-Vorschau. Stattdessen verwende ich einfach normale 2D Ansichten der Objekte, meinetwegen eine von vorne und eine vorn hinten und dann gehen von den veränderbaren Flächen (also die Teile des Objektes von denen ich die Texture ändern möchte) Pfeile weg und am Ende stehen ComboBoxen mit der Texturauswahl.
In den ComboBoxen sind von mir aus noch kleine Vorschaubilder der Texturen.
Der Vorteil wäre auch das man sehen würde welche Flächen der Objekte veränderbar sind.
Meine Frage wäre wie man sowas realisieren könnte.
Die Probleme wären zum einen das automatische erkennen von veränderbaren Flächen (mal angenommen die Informationen liegen vor) und dann das zeichnen der Linien zu den ComboBoxen.
Ich hab gesehen das du (@Marco13) mal eine Bibliothek geschrieben hast zum zeichnen von Swing Objekten in JOGL Umgebungen. Sowas in der Art würde ich dann wohl auch benötigen, es sei denn ich mache links und rechts vom JOGL Panel ein normales Swing Panel das die ComboBoxen beinhaltet.
Was dann aber auch erforderlich wäre das das Tool je nach geladenem Objekt (welche unterschiedlich viele veränderbare Flächen haben können) die Linien und ComboBox dynamisch zeichnet und anpasst.
Es sei denn jemand hat hier vielleicht noch eine andere Idee wie ich so etwas umsetzen könnte.

Hab nochmal ne kleine Zeichnung gemacht wie ich mir das in etwa vorstelle:
 

Evil-Devil

Top Contributor
Wenn du nur die bereits definierten Texturflächen anklickbar machen willst, dann würde ich empfehlen die UVs zu nutzen. In selbigen sind Vertice/Faces definiert zu denen die jeweilige Textur gehört.

Sprich sobald ein Klick auf dein Model erfolgt schaust du nach zu welchem UV-Set das Face gehört und kannst dann entsprechend alles davon ersetzen :)
 

Marco13

Top Contributor
Auch diese Fragen und Beschreibungen sind wieder sehr speziell - aber gleichzeitig noch zu schwammig. Ein wichtiger Punkt ist wohl, wie die "veränderbaren Flächen" spezifiziert sind. Wenn das ohnehin schon Geometry-Groups (bzw. mtl-Groups) in den OBJs sind, sollte man da relativ leicht rankommen. Dann muss man sich aber noch um's Picming kümmern. Das in JOGL selbst zu machen, kann ein bißchen aufwändiger sein, aber WIE genau es in Java3D geht weiß ich auch nicht - also in diesem Fall mit OBJs und Groups usw. alles was über Stichworte wie PickCanvas, und ein paar Snippets die ich dazu mal ausprobiert hatte, hinausgeht.

Diese ComboBoxes, ob in 2D oder 3D, sind erstmal etwas, was orthogonal ist zu der Funktionalität, die OBJ-Groups zu lesen und die Möglichkeit zum Ändern der Texturen zu bieten.

Zu Swogl (dem 3D-Components-Ding) sollte ich erwähnen, dass es da NOCH kein Java3D-Backend gibt. Das liegt schon als "Kleines Gelbes Haftettikett" in meiner TODO-Liste, aber wann ich dazu komme, weiß ich nicht... (Zeit, Zeit, Zeit...)

Für den Fall dass man die ComboBoxes in 2D macht, muss man sich überlegen, wie man die Linien zeichnet - das kann ein bißchen fummelig werden, aber geht natürlich. Für den 3D-Fall würde sich sofort die Frage nach der Position der ComboBoxes im 3D-Raum stellen (wäre allgemein noch ein bißchen anspruchsvoller).

Man könnte sich auch (für den Anfang) eventuell (!) relativ einfach Mischformen vorstellen, z.B. das wenn eine ComboBox den Focus hat, das entsprechende Teil gehighlighted wird oder so...

Möglichkeiten über Möglichkeiten...
 

Shaguar

Mitglied
Also ich hab zwar auch schon mal erwähnt aber ich ich sags nochmal, ich bin alles andere als festgelegt auf Java3D. Das Ganze kann auch genausogut in JOGL realisiert werden. Ich hab halt nur meine ersten Gehversuche in der 3D Welt mit Java3D gemacht.
 

Shaguar

Mitglied
So ich habe jetzt noch eine weitere Info. Die Objekte die ich laden will (ob nun mit JOGL oder Java3D) werden mit ziemlicher Sicherheit VRML (also .wrl) Dateien sein.
Gibt es dafür einen Loader für Java3D?
Ich hab nach googlen gesehen das einer im Paket com.sun.j3d.loaders.vrml97.VrmlLoader ist, aber das Paket ist in meiner Java Installation nicht enthalten.
Gibt es da mittlerweile einen anderen, neueren Loader oder muss ich mir den extra runterladen? (wenn ja wo?)

Gruß
Shaguar
 

Shaguar

Mitglied
Ja kann ich denn mit einem entsprechenden Tool die wrl Datei auch in ein besseres Format umwandeln?
Ich habe den Loader mal getestet und es kommen sowieso jede Menge Exception, deswegen würde sich das vielleicht eh anbieten. Außerdem würde ich das Model auch gerne noch kleiner bekommen, momentan sind die Dateien so 40-50Mb groß, gibts da vielleicht ein anderes Format das die Daten etwas effizienter speichert?
 

Marco13

Top Contributor
Sicher, aber dann stellt sich sofort wieder die Frage nach dem loader. "Einfach" und universell ist eben OBJ, aber die sind auch erstmal ziemlich groß. Ein gezipptes OBJ könnte eine Alternative sein, aber... wer weiß, was das am Ende werden soll...
 

Shaguar

Mitglied
Welche Tools kennst du denn zum umwandeln von *.wrl Dateien? Ich habe bisher Blender getestet aber das will meine wrl Datei nicht importieren.
Wenn möglich Freeware oder kostenlose Demo.

Danke
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K TableView: 'Komplexes' Object AWT, Swing, JavaFX & SWT 11
S 3D-Grafik Marker zu aus Screen anvisiertem Object AWT, Swing, JavaFX & SWT 1
Paul15 ActionListen auf Object in main AWT, Swing, JavaFX & SWT 7
L Swing Object aus JTable AWT, Swing, JavaFX & SWT 1
R Graphics-Object speichern AWT, Swing, JavaFX & SWT 4
J 2D-Grafik Graphics2D object in ein anderes Zeichnen AWT, Swing, JavaFX & SWT 7
M Object[][] in double[][] casten AWT, Swing, JavaFX & SWT 6
D Object mit JTable verknüpfen AWT, Swing, JavaFX & SWT 7
A Swing Drag and Drop TreeNode User Object AWT, Swing, JavaFX & SWT 3
D JTree - Zugriff auf Nodes mit Object AWT, Swing, JavaFX & SWT 6
N JComboBox mit Custom Object AWT, Swing, JavaFX & SWT 2
D JRadioButton Object AWT, Swing, JavaFX & SWT 2
L JTable SelectRowByValue(Object Value)? AWT, Swing, JavaFX & SWT 3
F Serialisiertes Object geht nicht zu Inizialisieren AWT, Swing, JavaFX & SWT 7
F invokeLater() vs synchronized(Object) AWT, Swing, JavaFX & SWT 5
G Image Object speichern oder in ein BufferedImage umwandeln AWT, Swing, JavaFX & SWT 2
P Wie das Component Object des Hauptfensters ermitteln? AWT, Swing, JavaFX & SWT 4
J Nochmal Drag&Drop, ABER: Object verschieben AWT, Swing, JavaFX & SWT 2
S Object auf Knopfdruck dem Frame hinzufügen AWT, Swing, JavaFX & SWT 2
F polygon object "stirbt" vor Ausführung in paint() AWT, Swing, JavaFX & SWT 4
S Object in Color umwandeln AWT, Swing, JavaFX & SWT 2
M drag and drop a object in swt AWT, Swing, JavaFX & SWT 2
M JTree Elemete zeigen nach 2. Mausklick Object an. Warum? AWT, Swing, JavaFX & SWT 2
M Warum wird Graphics-Object zerstört? AWT, Swing, JavaFX & SWT 8
T object in tabelle AWT, Swing, JavaFX & SWT 2
D PDF Viewer in SWT-Anwendung AWT, Swing, JavaFX & SWT 8
A JFace/SWT: ListViewer Inhalt nach Selection in zweitem List Viewer aktualisieren! AWT, Swing, JavaFX & SWT 5
reibi SWT Image viewer AWT, Swing, JavaFX & SWT 2
D Image Viewer gesucht AWT, Swing, JavaFX & SWT 5
B Sudokuartiger View (RadiobuttonTableView) mit JFace Viewer? AWT, Swing, JavaFX & SWT 3
G Problem mit Acrobat Viewer AWT, Swing, JavaFX & SWT 2
D HTML-Viewer für "gepackte" HTMLs mit StyleSheets AWT, Swing, JavaFX & SWT 3
G HTML-Viewer AWT, Swing, JavaFX & SWT 11

Ähnliche Java Themen

Neue Themen


Oben