First off, this is my first proper JME3 project, my first forum post and I have absolutely NO experience using Blender or of 3D modelling at all. That is precisely why I am using assets downloaded from Blend Swap for my game instead of making my own.
The models in particular are these fine WW2 fighter planes, fully textured. They are also animated, but I intend to deal with that later.
Obviously if I knew half a thing about modelling and I made these myself, I could make them the way JME3 wants me to. But I don’t have a clue and the documentation doesn’t say anything of help at all.
I can get the models to load, but I can’t texture them. I heard something about UV mapping on the forums but I have tried everything and it won’t work. Pity the n00b and please help!
You set the texture using material.setTexture …
Read this: https://wiki.jmonkeyengine.org/legacy/doku.php/jme3:beginner:hello_material
<cite>@benkibitzer said:</cite> You set the texture using material.setTexture ... Read this: https://wiki.jmonkeyengine.org/legacy/doku.php/jme3:beginner:hello_material
To which material?!?! I read all of that, but this is different! I have seen other models imported and textured as standard because the .j3o’s come with materials with all the textures attached! (I think)
The material of a j3o is being exported by blender then…
You should inform yourself how to import models correctly into your project.
I think there is even a video tutorial about that.
I feel I must clarify.
I cannot install the Ogre XML Exporter, because I keep on getting an error. Instead, in the SDK, I find the .blend file under Project Assets and select Convert to J3O Binary. It loads the model like you’d expect but not the textures. So I looked it up here and found these:
Make sure that no textures are packed in the .blend file. Make sure all textures used in the .blend file are in the assets folder of the project.Truly enough, the textures were packed into the model, so I unpacked them, but I wasn't sure where to. Blender, by default, puts them in a folder called "textures" in the same directory as the model, but I don't know where JME3 likes them. Also, I heard that they need UV-mapping from somewhere, but I have no idea.
First of all, thanks Normen for the reply, I will check that out now.
I tried unpacking the textures, mapping them to UV and importing the model in the SDK, when I got this:
[java]
java.lang.IllegalStateException: No loader registered for type “tif”
at com.jme3.asset.ImplHandler.aquireLoader(ImplHandler.java:199)
at com.jme3.asset.DesktopAssetManager.loadAsset(DesktopAssetManager.java:266)
at com.jme3.asset.DesktopAssetManager.loadTexture(DesktopAssetManager.java:341)
at com.jme3.scene.plugins.blender.textures.TextureHelper.loadTextureFromFile(TextureHelper.java:718)
at com.jme3.scene.plugins.blender.textures.TextureHelper.getTextureFromImage(TextureHelper.java:484)
at com.jme3.scene.plugins.blender.textures.TextureHelper.getTexture(TextureHelper.java:143)
at com.jme3.scene.plugins.blender.materials.MaterialContext.<init>(MaterialContext.java:133)
at com.jme3.scene.plugins.blender.materials.MaterialHelper.toMaterialContext(MaterialHelper.java:170)
at com.jme3.scene.plugins.blender.materials.MaterialHelper.getMaterials(MaterialHelper.java:340)
at com.jme3.scene.plugins.blender.meshes.MeshHelper.toMesh(MeshHelper.java:108)
at com.jme3.scene.plugins.blender.objects.ObjectHelper.toObject(ObjectHelper.java:153)
at com.jme3.scene.plugins.blender.AbstractBlenderLoader.toObject(AbstractBlenderLoader.java:137)
at com.jme3.scene.plugins.blender.BlenderLoader.toObject(BlenderLoader.java:71)
at com.jme3.scene.plugins.blender.BlenderModelLoader.load(BlenderModelLoader.java:66)
at com.jme3.scene.plugins.blender.BlenderModelLoader.load(BlenderModelLoader.java:52)
at com.jme3.asset.DesktopAssetManager.loadAsset(DesktopAssetManager.java:283)
at com.jme3.asset.DesktopAssetManager.loadModel(DesktopAssetManager.java:369)
[catch] at com.jme3.gde.core.assets.SpatialAssetDataObject.loadAsset(SpatialAssetDataObject.java:90)
at com.jme3.gde.core.assets.SpatialAssetDataObject.loadAsset(SpatialAssetDataObject.java:53)
at com.jme3.gde.core.assets.AssetData.loadAsset(AssetData.java:84)
at com.jme3.gde.modelimporter.ModelImporterVisualPanel3.loadModel(ModelImporterVisualPanel3.java:90)
at com.jme3.gde.modelimporter.ModelImporterVisualPanel3.loadSettings(ModelImporterVisualPanel3.java:59)
at com.jme3.gde.modelimporter.ModelImporterWizardPanel3.readSettings(ModelImporterWizardPanel3.java:81)
at org.openide.WizardDescriptor.updateStateOpen(WizardDescriptor.java:893)
at org.openide.WizardDescriptor.updateState(WizardDescriptor.java:844)
at org.openide.WizardDescriptor.goToNextStep(WizardDescriptor.java:1088)
at org.openide.WizardDescriptor.access$1500(WizardDescriptor.java:139)
at org.openide.WizardDescriptor$Listener$1.run(WizardDescriptor.java:2118)
at org.openide.WizardDescriptor.lazyValidate(WizardDescriptor.java:1516)
at org.openide.WizardDescriptor.access$1600(WizardDescriptor.java:139)
at org.openide.WizardDescriptor$Listener.actionPerformed(WizardDescriptor.java:2137)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.openide.util.WeakListenerImpl$ProxyListener.invoke(WeakListenerImpl.java:457)
at com.sun.proxy.$Proxy38.actionPerformed(Unknown Source)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:729)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:688)
at java.awt.EventQueue$3.run(EventQueue.java:686)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:702)
at java.awt.EventQueue$4.run(EventQueue.java:700)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:699)
at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:158)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:154)
at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:182)
at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:221)
at java.security.AccessController.doPrivileged(Native Method)
at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:219)
at java.awt.Dialog.show(Dialog.java:1082)
at org.netbeans.core.windows.services.NbPresenter.superShow(NbPresenter.java:1074)
at org.netbeans.core.windows.services.NbPresenter.doShow(NbPresenter.java:1109)
at org.netbeans.core.windows.services.NbPresenter.run(NbPresenter.java:1096)
at org.netbeans.core.windows.services.NbPresenter.run(NbPresenter.java:126)
at org.openide.util.Mutex.doEventAccess(Mutex.java:1363)
at org.openide.util.Mutex.readAccess(Mutex.java:273)
at org.netbeans.core.windows.services.NbPresenter.show(NbPresenter.java:1081)
at java.awt.Component.show(Component.java:1651)
at java.awt.Component.setVisible(Component.java:1603)
at java.awt.Window.setVisible(Window.java:1014)
at java.awt.Dialog.setVisible(Dialog.java:1005)
at com.jme3.gde.modelimporter.ImportModel.actionPerformed(ImportModel.java:82)
at org.openide.awt.AlwaysEnabledAction$1.run(AlwaysEnabledAction.java:197)
at org.openide.util.actions.ActionInvoker$1.run(ActionInvoker.java:95)
at org.openide.util.actions.ActionInvoker.doPerformAction(ActionInvoker.java:116)
at org.openide.util.actions.ActionInvoker.invokeAction(ActionInvoker.java:99)
at org.openide.awt.AlwaysEnabledAction.actionPerformed(AlwaysEnabledAction.java:200)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:290)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:729)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:688)
at java.awt.EventQueue$3.run(EventQueue.java:686)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:702)
at java.awt.EventQueue$4.run(EventQueue.java:700)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:699)
at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:158)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
[/java]
We don’t support tif images I guess. Convert them to png or jpg and don’t forget to update anything referencing the old tifs
Right-click the image, select “Edit Image” and save as PNG.
<cite>@normen said:</cite> Right-click the image, select "Edit Image" and save as PNG.In the folder or in the SDK?
SDK
<cite>@benkibitzer said:</cite> lookIt's a TIF image; the SDK doesn't recognise it and so doesn't give me the options to do that stuff.
I will learn Blender and 3D modelling myself and fix my own problems if I can’t get it fixed soon. This is clearly going absolutely nowhere.
You can convert tiff files with Gimp or photoshop.
If you don’t have those you can always try online converters like this one
It works ok
Quite honestly, the reason I’m here is because the documentation is a bit of a shambles. The Hello Tutorial series tells you to use Ogre XML, which I can’t get to work. I was then sent this video by @normen showing a different type of model; definitely not Ogre or J3O, so that was confusing me.
<cite>@normen said:</cite> http://www.youtube.com/watch?v=6-YWxD3JByEI have now unpacked the textures for the model and guess what? they're in a totally new format that won't work! Really, I would like a way to install Ogre XML to the latest Blender version seeing as the SDK won't do it for me, and just pray that something will work for me today. Anyone know how to do that?
<cite>@SamBrev said:</cite> definitely not Ogre or J3O, so that was confusing me.The .obj format also works just fine for jme.
<cite>@SamBrev said:</cite> I have now unpacked the textures for the model and guess what? they’re in a totally new format that won’t work!As Nehon said: open the texture with gimp and export it as png or jpg.
<cite>@SamBrev said:</cite> Really, I would like a way to install Ogre XML to the latest Blender versionI don't use the ogre exporter myself but it seems to be a little tricky because there have been a lot of topics about that in the past. BUT there is also a well working direct importer in the SDK. Just put your Blender models as .obj or .blend into your assets an double-click them in the Project Assets. http://i.imgur.com/2jnbhA3.png?1
The .obj format also works just fine for jme.Last time I checked .obj files didn't keep track of materials.
As Nehon said: open the texture with gimp and export it as png or jpg.That's all well and good but the blend is still referencing the TIF files.
I don't use the ogre exporter myself but it seems to be a little tricky because there have been a lot of topics about that in the past. BUT there is also a well working direct importer in the SDK. Just put your Blender models as .obj or .blend into your assets an double-click them in the Project Assets. http://i.imgur.com/2jnbhA3.png?1The importer doesn't work somehow.
<cite>@normen said:</cite> "Somehow", hm?if you right click on the blend and select convert to j3o nothing happens, but if you use the importer it comes up with a blank screen in the preview box