OrgXML + Blender + JMonkey - java

I have a problem with OrgXML and JMonkeyEngine. I created a model in blender. After that I exported it into OrgXML format. And I got few files with extensions: mash.xml, scene, materials and some textures in jpg. I was reading the tutorial from JMonkey site and there is an example on that site:
// Load a model from test_data (OgreXML + material + texture)
Spatial ninja = assetManager.loadModel("Models/Ninja/Ninja.mesh.xml");
ninja.scale(0.05f, 0.05f, 0.05f);
ninja.rotate(0.0f, -3.0f, 0.0f);
ninja.setLocalTranslation(0.0f, -5.0f, -2.0f);
rootNode.attachChild(ninja);
// You must add a directional light to make the model visible!
DirectionalLight sun = new DirectionalLight();
sun.setDirection(new Vector3f(-0.1f, -0.7f, -1.0f).normalizeLocal());
rootNode.addLight(sun);
This is correct for this example. I have a beautifull ninja in Eclipse. But when I try do the same with my model, it doesn't work correctly. I have a red sword (which I created) in space, there aren't any textures. I created assets folder in my project directory, and subfolders "Models" and "Sword". In "Sword" directory I have all files which were exported from blender. Anybody know what I'm going wrong?

There's a bunch of stuff I would try.
First you probably want to figure out if it's an export problem in Blender or import problem in jmonkey.
Open the .mesh.xml files and see if there's a bunch of coordinates inside.
Second try importing the .scene with the asset manager instead of .mesh.xml.
Third, try to convert the .scene to a .j3o file by right clicking on it.
I'm a new jmonkey user an am trying to figure all this stuff out too.

Related

How to write the right URL for an image

Im making a game with JavaFX and want to load images into it. Im having trouble with finding the correct URL to load the image
Its supposed to be a Memory game and the image is supposed to be loaded into a button for the player to interact with. Normally when I tried working with images, I start the URL at the projects folder and it works fine but here I keep getting error messages. I only get it to work when I type in the full URL from the C: Drive but shouldnt it also be possible to access it just from projects folder?
This is the constructor of the class for the Memory Cards
public MemoryCard(String front, int picID)
{
front = new ImageView(front);
picBack = new ImageView("src/grafics/back.jpg");
setGraphic(picBack);
//...
}
I have created a folder called 'grafics' under the source folder with the correct images inside. I thought this would work but it just gives me the IllegalArgumentException message on the line where I load the image.

Texturing bug in Jmonkey

To my immense surprise, it seems impossible to find any other people having this problem -- I can use Jmonkey to import a mesh (in my case a gear), but it doesn't properly map the texture (which is supposed to look like wood), only texturing a few select faces shown:
It still looks fine in Blender:
To summarize, how do I get the texture to map over the ENTIRE gear, not just some triangles?
My code is written like this (pardon if it's a little messy, I've been trying to solve this for a while now):
Spatial gear = assetManager.loadModel("Models/cog_3.j3o");
//Geometry geargeo=(Geometry)gear;
//Node gearnode = (Node)gear;
//Mesh gearmesh = (Mesh) gearnode;
//Mesh gearmesh = (Geometry)(gearnode.getChildren().get(0));
TangentBinormalGenerator.generate(gear);
Material wood = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
Texture woodtex = assetManager.loadTexture("Textures/wood-texture.jpg");
woodtex.setWrap(Texture.WrapMode.Repeat);
wood.getAdditionalRenderState().setFaceCullMode(RenderState.FaceCullMode.Off);
wood.setTexture("ColorMap", woodtex);
wood.getAdditionalRenderState().setBlendMode(RenderState.BlendMode.Alpha);
gear.setMaterial(wood);
rootNode.attachChild(gear);
My mesh looks like this (you can see the uv seams):
Uv looks like this:
I'm using blender 2.78a,
and (as far as I know), the latest version of JME.
Any help is appreciated greatly.

jme3 - UV map misplaced on model exported from Blender

I created a simple model of a barrel (.zip) in Blender 2.69. Then I created a UV map in Blender and made a UV mapped texture out of it (its in the archive, too). Then I imported my texture in Blender, now the mapping matches:
In Blender the model looks fine so far:
By using the Ogre exporter plugin that I installed via the jmonkeyengine SDK, I exported the model. The result of this is my OgreXML format file of the barrel (I did not export material).
Now, I tried to add the barrel to my world like this:
this.barrel = this.assetManager.loadModel("models/barrel/Barrel.mesh.xml");
Material barrelMat = new Material(this.assetManager,
"Common/MatDefs/Light/Lighting.j3md");
barrelMat.setTexture("DiffuseMap",
this.assetManager.loadTexture("models/barrel/Barrel.jpg"));
barrelMat.setBoolean("UseMaterialColors", true);
barrelMat.setColor("Diffuse", ColorRGBA.White);
barrelMat.setColor("Specular", new ColorRGBA(0.3f, 0.1f, 0, 1));
barrelMat.setFloat("Shininess", 4f);
this.barrel.setMaterial(barrelMat);
this.rootNode.attachChild(this.barrel);
The result is this:
Is there something else I have to consider when setting the texture for my UV mapped model?
Often when transferring models from Blender to something like JME, the textures will be upside down. Where you load the texture:
barrelMat.setTexture(“DiffuseMap”,
assetManager.loadTexture(“models/barrel/Barrel.jpg”));
Instead use the TextureKey form of the loadTexture() method and pass yFlip false since true is the default.
assetManager.loadTexture(new TextureKey(“models/barrel/Barrel.jpg”, false));
That should fix your issue.
References:
loadTexture() : http://hub.jmonkeyengine.org/javadoc/com/jme3/asset/AssetManager.html#loadTexture(com.jme3.asset.TextureKey)
TextureKey : http://hub.jmonkeyengine.org/javadoc/com/jme3/asset/TextureKey.html#TextureKey(java.lang.String,%20boolean)

Creating a Pixmap in LibGDX can't find file

This code keeps throwing io.FileNotFoundException:
spriteBatch = new SpriteBatch();
spriteMap = new Texture(new Pixmap(new FileHandle("Sprites.png")));
spriteMap.setFilter(TextureFilter.MipMapLinearNearest, TextureFilter.MipMapLinearNearest);
spriteMap.setWrap(TextureWrap.ClampToEdge, TextureWrap.ClampToEdge);
sprites = new TextureRegion(spriteMap).split(16, 16);
any ideas what's wrong? i have also tried spriteMap = new Texture(new Pixmap(Gdx.files.internal("Sprites.png"))); but no luck...Sprites.png is just right in the package this class is in
While using this:
spriteMap = new Texture(new Pixmap(Gdx.files.internal("Sprites.png")));
be totally sure you have a file called "Sprites.png" (with the capital 'S') inside your assets folder.
assets/Sprites.png
If you have a folder between, for example data (created with the Libgdx-setup-ui by default). then you would need to put it aswell.
assets/data/Sprites.png
If you are sure the file is there. Then:
If running from eclipse, refresh your project (f5), it may be unsynchronized)
If this only happens in the Desktop project, then maybe your assets folder is not correctly linked.
Edit:
You edited your question :p
Sprites.png is just right in the package this class is in
thats your problem, Gdx.files.internal looks into the Android assets folder. not the folder in which the class is in.

Runnable JAR file won't

I created this card game in Java. What it does it it presents one card face up and 4 more cards face down. You wager from 1 to 100 coins and try to pick a higher card from the face down cards. If you pick a higher card, your wager is doubled and you can choose to go double or nothing on another round.
The program uses 3 .java files in one package:
HigherNumber: Main class, contains the bulk of the code.
Deck: Contains definition for a class representing a deck of cards.
Card: Contains definition for a class representing an individual card.
So naturally, this program uses a lot of pictures, to represent the cards. In my original implementation, I just passed ImageIcon a string to represent the location of the cards. So like, for the icon for a face down card,
faceDown = new ImageIcon("multimedia/redBack.gif");
When I did this, the program ran perfectly when run through Eclipse. So I used Eclipse to Export to a runnable JAR file. This JAR file then ran without a problem, except if I moved the JAR file anywhere else, none of the images showed up.
So I researched and found out about using URLs to combat this. I reworked the program to use URLs, so now I have stuff like this:
//Set URL for default faceDown icon.
faceDownURL = this.getClass().getResource(pictureRoot +"redBack.gif");
//Set location for default back face of cards.
faceDown = new ImageIcon(faceDownURL);
Now it runs fine in Eclipse, but I cannot get the exported runnable JAR to work. When run from Windows, it just kinda blinks and does nothing. When I run through the command line, I get this:
C:\Documents and Settings\mstabosz>java -jar C:\Temp\HigherNumber.jar
Exception in thread "main" java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(Unknown Source)
at higherNumber.Card.setImage(Card.java:150)
at higherNumber.Card.<init>(Card.java:36)
at higherNumber.Deck.<init>(Deck.java:22)
at higherNumber.HigherNumber.<init>(HigherNumber.java:16)
at higherNumber.HigherNumber.main(HigherNumber.java:857)
Trying to follow this code, it looks like the source of the problem is in the Card class at line 150. At line 150, the class is in the setImage() function, which is building a string called iconName to be used to set the image for each card as it is created. It then returns an ImageIcon to the Card class's constructor.
//Set up the icon for the card.
this.cardIcon = setImage();
Line 150 is the return statement. Here are the statements that create the URL cardIconURL which is used in the ImageIcon.
//Create a URL based on the constructed string.
URL cardIconURL = this.getClass().getResource(iconName);
return new ImageIcon(cardIconURL);
I just don't get what's going wrong here. The program worked fine as a runnable JAR when I was using Strings instead of URLs. It works fine when run through Eclipse. It doesn't work as a runnable JAR now.
I did read up on something called manifests, which I had trouble understanding. I did have Eclipse generate a manifest for this program:
Manifest-Version: 1.0
Main-Class: higherNumber.HigherNumber
What am I missing?
i use something like:
URL myurl = this.getClass().getResource("file.png");
myIconImage = Toolkit.getDefaultToolkit().getImage(myurl);
you're doing:
return new ImageIcon(cardIconURL);
Maybe try my second line. Also i store the images in the jar.
Okay it looks like I got the image files in the runnable JAR by dragging and dropping the "multimedia" folder which contains the pictures into the "highernumber" package in Eclipse. I'm still getting the NullPointerException though.

Categories

Resources