Hilfe: Ich sehe durch die ganze Api's nicht mehr durch!

Status
Nicht offen für weitere Antworten.

spyboot

Bekanntes Mitglied
Hi Leute!

Ich hab ein Problem:

Wenn ich jetzt zb. ein 3D Spiel programmieren will verwende ich java3D (was ich noch nicht verstanden hab).
Aber was genau ist Jogl und der ganze andere kram?
Ich weiß nicht einmal wie ich ein 3D Object exact positionieren kann!
Ist JOGL sowas wie ein Apklatsch von Java3D?
Und wenn ja: Was lohnt es sich eher anzueignen?
Ich finde Java3D ziehmlich kompliziert:

Zuerst dachte ich es wäre so als ob mann einen JFrame verwaltet:Mann übergibt ihm dass Objekt und kann es hinterher noch verändern.
Doch in Java3D geht dass nicht...

Und wenn ich jetzt ein Objekt hinzufügen oder entfernen will muss ich dann die ganze Szene neu aufbauen?
Muss ich wenn ich eine Animation erstellen will alles irgendwie bei diesem Timer einstellen oder kann ich dass auch wie bei Graphics2D alles einfach immer wieder mit den aktuellen koordinaten neuzeichnen lassen?

Es wäre sehr net wenn mir jemand auf diese ganzen Fragen eine Antwort geben könnte!
 
EINE Antwort wird da schwierig. Ohne dich desilliusionieren, demotivieren, diskreditieren oder deinen Enthusiasmus dämpfen zu wollen: Ein 3D-Spiel ist nicht gerade etwas, womit mal einfach so anfängt. (Sei es in bezug auf das Programmieren an sich, oder als Projekt...).

Vielleicht suchst du eher sowas, wie das, was man mit http://www.google.com/search?hl=de&q=3d+game+creator&btnG=Suche&lr= findet?

Aber ich versuch's...

Wenn ich jetzt zb. ein 3D Spiel programmieren will verwende ich java3D (was ich noch nicht verstanden hab).
Das ist eine Möglichkeit. Eine Alternative wäre z.B. JOGL

Aber was genau ist Jogl und der ganze andere kram?
JOGL ist eine Bibliothek, mit der man direkt OpenGL-Befehle in Java ausführen kann. Man kann zwar interessantere Effekte erreichen als mit Java3D (Shader verwenden usw, und effizienter wäre es u.U. auch) aber der Aufwand wäre deutlich (!) höher. Der "ganze andere Kram" ist anderer Kram :roll:

Ich weiß nicht einmal wie ich ein 3D Object exact positionieren kann!
Indem man es an einen TransformNode hängt, dem man die passende Transform3D gibt..... :roll: Siehe dazu ein Java3D-Tutorial...


Ist JOGL sowas wie ein Apklatsch von Java3D?
Siehe oben: Nein. Aber soweit ich weiß gibt es Bestrebungen, Java3D und JOGL zu mischen.

Und wenn ja: Was lohnt es sich eher anzueignen?
Die beiden Technologien sind recht "orthogonal" zueinander. Forensuche liefert Threads, die die beiden vergleichend gegenüberstellen.


Ich finde Java3D ziehmlich kompliziert:

Dann lass' die Finger von JOGL :wink:

Zuerst dachte ich es wäre so als ob mann einen JFrame verwaltet:Mann übergibt ihm dass Objekt und kann es hinterher noch verändern.
Doch in Java3D geht dass nicht...


Doch, das geht, und der Vergleich mit dem JFrame ist hier garnicht sooo unangebracht: Auch mit Components baut man eine Hierarchie auf: Oben der JFrame, darin Panels, darin Buttons. Genau wie der Szenegraph in Java3D: Oben das Universe, darin ein Node, darin ein Shape3D....

Und wenn ich jetzt ein Objekt hinzufügen oder entfernen will muss ich dann die ganze Szene neu aufbauen?

Nein. Um die Objekte zu verändern, muss man wissen, welche Veränderung man machen will, und wie man sie erreicht. Oft müssen passende Capability-Bits gesetzt werden. Siehe dazu ein Java3D-Tutorial...

Muss ich wenn ich eine Animation erstellen will alles irgendwie bei diesem Timer einstellen oder kann ich dass auch wie bei Graphics2D alles einfach immer wieder mit den aktuellen koordinaten neuzeichnen lassen?

Um's Neuzeichnen braucht man sich bei Java3D nicht zu kümmern. Animationen kann man mit Interpolatoren und einem passenden Alpha-Objekt erreichen. Siehe auch dazu: Tutorials, Tutorials, Tutorials....


Vielleicht wäre für den Einstieg sowas wie http://www.jmonkeyengine.com/ am ehesten geeignet. Man bekommt damit zwar vermutlich nicht so mit, was "unter der Oberfläche" eigentlich passiert, aber ... man hat vermutlich schneller Erfolgserlebnisse.........
 
Ok!

ich habe mich jetzt in Java3D ein wenig eingearbeitet kann jetzt auch eine Rotation mit Transform3D um mehrer Achsen machen.

Jetzt habe ich noch eine Frage:

Wenn ich wie es bei einem JFrame bzw Frame möglich gewesen wäre die Rotation zb um die X achse nachträglich veränder passiert nichts und wenn ich sie veränder und sie nachträglich wieder der TransformGroup und danach der Banchgruop hinzufüge krieg ich einen Fehler!

Kann mir jetzt einer erklären wie ich sowas nachträglich machen kann?
Einfach mit einem Timer eine Animation einstellen geht nicht da es ja "sofort" passieren soll und weil es ja auch keine Animation werden soll.
 
Äh wie kann ich jetzt ein Object um seine eigene Axe drehen?
Wenn ich es über transform drehe dreht es sich immer um die 0,0,0 koordinate!
 
Eine gute Alternative zu Java3D ist

www.jmonkeyengine.com

insbesondere, weil diese mehr "spielorientiert" ist als Java3D mit seinem allgemeinerem Anwendungsbereich, insbesondere was Effekte (Schatten, Wasser, Nebel, Partikelsysteme) angeht. Dokumentation ist manchmal etwas rar, aber es gibt ein paar Demos und Tutorials, und die Communitiy ist auch hilfsbereit.
 
Ich hab mir die JMonkeyEngiene jetzt schonmal angeschaut und grafisch macht sie ja einiges her aber: Sie ist im vergleich zu Java3D ungefär 3-mal so langsam (fpps) wenn man nur einen würfel dargestellt haben will.

Nun aber zu einer anderem Problem:

ich habe einen Texturloader aus dem internet:

Code:
private static Appearance textur(String filename) {
        Appearance appear = new Appearance();
		 
        System.out.println("TexturedPlane attempt to load file: "+filename);
        TextureLoader loader = new TextureLoader(filename,frame);
        ImageComponent2D image = loader.getImage();
 
        if(image == null) {
                System.out.println("Fehler: "+filename);
        }
 
        System.out.println("Image width  = " + image.getWidth());
        System.out.println("Image height = " + image.getHeight());
        
       
        Texture2D texture = new Texture2D(Texture.BASE_LEVEL, Texture.RGB,
                                          image.getWidth(), image.getHeight());
        texture.setImage(0, image);
        texture.setEnable(true);
        texture.setMagFilter(Texture.NICEST);
 
        appear.setTexture(texture);
 
        appear.setTransparencyAttributes(
           new TransparencyAttributes(TransparencyAttributes.FASTEST, 0.1f));
       
        return appear;
	}

soweist sogut dochwenn ich ihn jetzt zb mit textur("tex.jpg") starte dann ist mein Objekt lediglich einfarbig!
(es scheint immer die farbe des 1x1 Pixels meines Bildes zu haben).

Hatt einer eine Idee woran dass liegen könnte?
-----
Ich denke ich werde diesen Thread nach dieser Frage schließen.
 
Dass die JMonkeyEngine bei einem Würfel dreimal so langsam ist, wie J3D, kann gut sein. Aber wenn man mal nicht nur EINEN (ggf. sogar noch utexturierten) Würfel hat, sondern 10 Texturierte Würfel, ist J3D vielleicht nurnoch doppelt so schnell, und bei einer komplexen Szene vielleicht nurnoch 10% schneller. Man hat oft diesen Tradeoff: Entweder, man macht alles höchst-optimiert "per Hand", oder man macht sich das Leben leichter. Anders formuliert: Mit reinem JOGL wäre die FPS vielleicht noch dreimal so hoch wie die von J3D, aber der Code auch dreimal so lang :wink:

Zur letzten Frage: Hast du deinem Objekt vernünftige Texturkoordinaten gegeben?
 
Nochmal zu JMonkeyEngine: Je nachdem, was du machen willst, gibt es viele Optimierungsmöglichkeiten: Rufst du den Würfel mit StandardGame auf oder dem langsameren SimpleGame usw.? Ich habe schon Szenen mit riesigen Terrains inklusive Bäumen in JME gesehen, und die FPS waren in Ordnung (manchen Modi sind auch ganze bewußt auf einen festen Wert wie 60fps oder so begrenzt - mehr bekommt unser Gehirn ja sowieso nicht mit).
Ich will nicht behaupten das JME die beste Java-3D-Engine ist, aber das eingebaute Java3D ist mit Sicherheit die schlechteste (für Spiele, wohlgemerkt).
 
Java3D erhebt glaubich garnicht den Anspruch, eine "Engine" zu sein - es ist nur eine API ... auf basis derer man eine Engine basteln könnte ... :? oder so
 
So kann man es auch sehen.

Ich finde es halt doof, dass sich so viele angehende Spiele-Programmierer mit Java3D rumquälen, wenn es bessere Alternativen gibt, bei denen viele spielspezifische Sachen schon vorgefertigt sind. Ich habe auch mal mit Java3D rumgespielt - ganz nett, aber eigentlich Zeitverschwendung (außer für Leute, die es lieben, beim Urschleim anzufangen). Was nützen dir die FPS, wenn dein Spiel dafür aussieht wie sterile hingeschmissene Bauklötze, weil dir Effekte, Physik usw. fehlen?
 
das Spiel muss ja nicht nur aus Vierecken bestehen.
Ich hab mir blender geholt und verwnde den Obj loader von Sun das reicht allemal um zb. ein einfaches Space-Game zu machen.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben