Java Großes 3D-Modell anzeigen

mythbu

Cadet 2nd Year
Registriert
Mai 2011
Beiträge
24
Hallo,

mein Problem ist recht simpel zu erklären: ich habe ein großes 3D-Mesh vorliegen (800 MB - 1,5 GB) und muss dieses nun dem Benutzer als "Vorschau" anzeigen, um ihn etwas auswählen zu lassen. Und das Ganze muss ich mit Java umsetzen.

Hättet Ihr Ideen, was ich hier machen kann? Es ist nämlich so, dass ich dieses Mesh nicht mit Blender oder anderen 3D-Programmen öffnen kann.

Viele Grüße,
mythbu
 
in welchem format liegt das ganze vor?
was genau muss ausgewählt werden? verschiedene meshes oder teile des mesh?
muss wirklich das mesh als vorschau angezeigt werden oder könnte man auch tricksen und zb eine gif animation des mesh präsentieren?
 
Was ist denn mit "Vorschau" gemeint? Muss es in Echtzeit laufen?
Wenn das Mesh so groß ist, wird's wohl aus Millionen Vertices bestehen. Mit etwas Glück sollte aber eine potente Grafikkarte das Ding noch darstellen können. Selbst die neueren Karten werden es aber wohl ohne Hilfe kaum flüssig hinbekommen.
Wenn es also flotter gehen soll, dann müssten entweder LOD-Stufen berechnet (nicht trivial) werden oder du steckst das Ding in eine passende Struktur (z.B. BSP-Tree).
Die genannte Impostor/Billboard-Variante ist auch ne Möglichkeit aber dazu müsste das Ding natürlich erstmal überhaupt gezeichnet werden können.
 
Hallo,

schumischumi schrieb:
in welchem format liegt das ganze vor?
OBJ oder PLY.

schumischumi schrieb:
was genau muss ausgewählt werden? verschiedene meshes oder teile des mesh?
Nein, man muss einen Punkt in das Mesh setzen an eine bestimmte Stelle, die nur von einem Menschen identifiziert werden kann :-)[/QUOTE]

schumischumi schrieb:
muss wirklich das mesh als vorschau angezeigt werden oder könnte man auch tricksen und zb eine gif animation des mesh präsentieren?
Wenn man das mit dem Punkt irgendwie hin bekommt kann man auf jeden Fall tricksen.

aphex.matze schrieb:
Was ist denn mit "Vorschau" gemeint? Muss es in Echtzeit laufen?
Nein. Also die Rotierung mit der Maus ist nicht umbedingt nötig.

aphex.matze schrieb:
Wenn das Mesh so groß ist, wird's wohl aus Millionen Vertices bestehen. Mit etwas Glück sollte aber eine potente Grafikkarte das Ding noch darstellen können. Selbst die neueren Karten werden es aber wohl ohne Hilfe kaum flüssig hinbekommen.
Bitte bedenken: Java steckt noch dazwischen!

aphex.matze schrieb:
Die genannte Impostor/Billboard-Variante ist auch ne Möglichkeit aber dazu müsste das Ding natürlich erstmal überhaupt gezeichnet werden können.
?

Gibt es nicht eine Methode das Mesh zu vereinfachen und einfach Punkte/Faces über Bord zu werfen. Ein so großes Mesh hat sicherlich mehr Faces als Pixel und die sind dann ja überflüssig. Außerdem reicht es, wenn es annähernd genau dargestellt wird. Lieber weniger Genauigkeit und mit der Maus rotieren als andersherum.

Viele Grüße,
mythbu
 
OBJ ist doch eigentlich gut geeignet, um ohne großes Rumrechnen direkt zu zeichnen.
Wenn du beim Einlesen gleich effizient konvertierst, sollte es sich dann auf ca. 1 GB RAM belaufen, was ja komplett im Rahmen des möglichen wäre.

Ich würde zuerst versuchen, tatsächlich den Mesh komplett zu zeichnen (OpenGL verwenden). Dazu brauchst du sowieso mal eine Einleseroutine.
Wenn du das Obj direkt abbildest (also ein Array Vertices und ein Array Indizes etc.) dann kannst du mit OpenGL diese Arrays quasi direkt nutzen.

1 GB => max. ca. 100 Mio. Vertices => das wären dann so ca. 10 FPS.
 
mythbu schrieb:
Nein. Also die Rotierung mit der Maus ist nicht umbedingt nötig.
Das macht's einfacher.

mythbu schrieb:
Bitte bedenken: Java steckt noch dazwischen!
OpenGL und die Graphikhardware kannst du deswegen trotzdem nutzen! Siehe JOGL

mythbu schrieb:
Gibt es nicht eine Methode das Mesh zu vereinfachen und einfach Punkte/Faces über Bord zu werfen. Ein so großes Mesh hat sicherlich mehr Faces als Pixel und die sind dann ja überflüssig. Außerdem reicht es, wenn es annähernd genau dargestellt wird. Lieber weniger Genauigkeit und mit der Maus rotieren als andersherum.
Ist eben nicht so einfach. Es gibt natürlich Lösungen aber prinzpiell und je nach Anforderung ist das Problem nicht einfach zu lösen. Frag' ggf. google nach "mesh simplification". Hier gibt's eine Arbeit zum Thema.
 
Zurück
Oben