# jMonkeyEngine 3: Einstieg



## Hoeze (30. Jun 2012)

Hi,
ich will gerade mein erstes richtiges 3D-Spiel programmieren, ich hab schon einfache 2D-Spiele programmiert, aber noch nie mit OpenGL, etc.
Ich hab also erst versucht, mich in LWJGL einzuarbeiten, beherrsche jetzt auch die grundlegenden Ideen dahinter, allerdings war mir das dann doch auf einem zu niedrigem Programmierlevel, weswegen ich jetzt die JMonkey Engine verweden will.
Jetzt hätte ich eine erste Frage:
Ich will einen flachen Boden machen, auf dem etwas fahren kann, deswegen will ich jetzt erstmal ein flaches Rechteck am Boden mit einem Bild als Textur.
Dazu muss ich wohl die Klasse "Quad" verwenden. Allerdings kann man da bei der Initialisierung nur Höhe und Breite angeben, allerdings müsste ich eigendlich die Ecke links unten und die Ecke rechts oben definieren. Wie stell ich das jetzt an?


----------



## Fu3L (30. Jun 2012)

Es ist ja ein Mesh, daher könntest du es sowieso so noch nicht in deiner Szene anzeigen lassen.

Du musst erst eine Geometry erstellen, der du das Quad übergibst. Auf dieser kannst du dann .setLocalTranslation() aufrufen.

Super wichtige Seite:
Documentation and Tutorials | jMonkeyEngine.org


----------



## Hoeze (30. Jun 2012)

Danke, ich habs schon zeichnen können, ich wusste nur nicht, wie ich aus einem Rechteck, das senkrecht am Ursprung steht eins mache, das waagerecht da steht, wo ich es brauche


----------



## Fu3L (30. Jun 2012)

Dann wäre es wohl localRotation() solltest du es noch nicht gelöst haben.


----------



## Hoeze (30. Jun 2012)

So, jetzt funktionierts


----------



## Hoeze (3. Jul 2012)

neue Frage:
Ich hab ein paar Geometry's, wie schaffe ich es, an den Kanten des Objekts Linien anzubringen?
Gibts dazu eine vorgefertigte Methode oder muss ich mir die für jede Box, Cylinder, etc. selber machen?


----------



## Fu3L (3. Jul 2012)

Es gibt den Toon-Shader, der ist aber nicht soo recht das, was gut klappt. Der RimLight Shader (aus dem ShaderBlow Projekt) zeichnet auch an den Kanten entlang, aber eher einen Glanz... 
Das einfachste ist, eine weitere Geometry, die ganz leicht größer ist, zu verwenden und der unshaded-material zu geben und auf "wireframe" zu setzen. So in der Art macht Minecraft das glaube ich auch (auch, wenns nicht jME ist )


----------



## Hoeze (16. Jul 2012)

Weitere Fragen:
1. Wie mach ich Objekte von beiden Seiten sichtbar? Sprich, dass beide Seiten mit Texturen belegt sind?
2. Ich hab mir jetzt mal einen Panzer programmiert, allerdings bekomm ichs nicht hin, dem eine schöne Textur zu geben. Die Teile, die ich mit Sketchup gezeichnet und als .obj eingebunden habe, werden einfach nur grau und bei Zylindern werden die Texturen seltsam verzogen (alles mit dem selben Material). Ich dachte mir eigendlich, dass meine Textur einfach ganz oft nebeneinander auf dem Objekt gezeichnet werden soll, bis die ganze Fläche bedeckt ist. Ich habe nicht wirklich Lust, jeden Panzer einzeln mit Sketchup ein Material zuweisen zu müssen.


----------



## Fu3L (17. Jul 2012)

Zu 1) was meinst du mit beiden Seiten?

Zu 2) Importieren ist so eine Sache. Ein Google-Suche mit "Importing Models from Sketchup site:jmonkeyengine.org" dürfte helfen


----------



## Evil-Devil (17. Jul 2012)

Hoeze hat gesagt.:


> Ich habe nicht wirklich Lust, jeden Panzer einzeln mit Sketchup ein Material zuweisen zu müssen.


Das wäre aber der normale Weg. Einmal dem Panzer alle Materials zuweisen und dann entsprechend verwenden.


----------



## Hoeze (18. Jul 2012)

Ich hab die Einzelteile meines Panzers als .obj exportiert und dann in jme3 geladen. Da sollte es doch möglich sein, jedem Objekt eines bestimmten Einzelteils eine andere Textur zuzuweisen.
Ich könnte natürlich auch für jede Textur mit Sketchup ein neues Einzelteil erstellen, aber so würde ich eben für jeden Panzer einen kompletten Satz Teile mitnehmen, was einerseits viel Speicherplatz frisst und andererseits das Hinzufügen neuer Panzer erschwert, bzw. das Hinzufügen eigener Texturen verhindern würde, wenn man kein Sketchup besitzt.


----------



## Marco13 (18. Jul 2012)

Kenn' mich mit JME nicht so aus, und Sketchup kenn' ich gar nicht, aber ... Normalerweise stehen in einer OBJ doch mehrere Groups (also in diesem Fall: Alle Einzelteile eines Panzers), und diese Groups werden über das "usemtl"-Schlüsselwort kenntlich gemacht. DAS wiederum bezieht sich auf die MTL-Datei, wo alle Texturen drin stehen sollten. (Ob JME damit klar kommt bzw. wie man das importiert, weiß ich nicht ... aber einzelne OBJs mit einzelnen Texturen klingt krampfig... AUSSER natürlich wenn man sich damit das Leben später leichter macht, wenn man z.B. neue Panzer aus den Einzelteilen anderer Zusammenbauen oder die Einzelteile leicht animieren können will).

EDIT: BTW, das mit den verzerrten Texturen: Hilft vielleicht schon die Info, dass da _vermutlich_ die Texturkoordinaten nicht stimmen?


----------



## Evil-Devil (19. Jul 2012)

Hab mit Sketchup noch nicht gearbeitet. Das letztes mal das ich ein 3D Modell erstellt hatte war mit Maya und dort musste ich unabhängig vom exportierten Format die UVs definieren und später entsprechend bemalen bzw. direkt in Maya bemalen. An sich sollte das in Sketchup nicht viel anders sein. Modell erzeugen, Textur zuweisen (Auto UV Generierung?) und exportieren.

Danach solltest im OBJ Falle wie schon von Marco geschrieben auf die MTL Informationen zugreifen können/müssen.


----------



## Evil-Devil (19. Jul 2012)

Nachtrag: JME3 unterstützt laut Dokumentation und Feature Übersicht auf jeden Fall MTL für OBJ.


----------



## Hoeze (5. Aug 2012)

Marco13 hat gesagt.:


> EDIT: BTW, das mit den verzerrten Texturen: Hilft vielleicht schon die Info, dass da _vermutlich_ die Texturkoordinaten nicht stimmen?



Wie kann ich die ändern? Google spuckt dazu i-wie nichts passendes aus...
Ich will einem Zylinder eine Textur so zuweisen, dass sie auf den flachen Seiten gerade ist, nicht i-wie "rumgezogen"...


----------



## Marco13 (5. Aug 2012)

So viel kann ich dazu nicht sagen (und BTW: Die JME-API-Doku ist ... nicht soo ausführlich..). Aber davon ausgehend, dass es per-Vertex-Texturkoordinaten sind: Man könnte sich die gegebenen Texturkoordinaten abholen, und ihnen die Werte zuweisen, die sie brauchen, entsprechend dem Vertex, der am gleichen Index zu finden ist.


----------



## Matthias K. (5. Aug 2012)

Vielleicht kannst du auf Blender mit ogreXML umsteigen und so alles aus Blender in die JME importieren.
Diesen Schritt wirst du sowieso irgendwann wagen müssen, um z.B. eine schöne Landschaft erstellen zu können.


----------

