jMonkeyEngine 3.0 Beginner’s Guide
上QQ阅读APP看书,第一时间看更新

Time for action – scale it!

Your freshly loaded fighter model appears as tall as the tavern next to it, while the dragon turns out to be as small as a lizard—what happened? It's possible that geometries do not come in the same scale; especially when you populate the scene with models from different sources, you have to resize them to fit the scene.

Resizing geometries is called scaling. Let's scale our translated cubes by adding the following to the simpleInitApp() method:

  1. Shrink the blue cube down to half its size: geom.setLocalScale(0.5f);.
  2. Grow the yellow cube to twice its size: geom2.scale(2.0f);.
  3. Clean and build the BasicGame template, and right-click on it to run the file.

Compare the outcome. The yellow cube is twice as big (2.0f) and the blue cube is half as big (0.5f) as before.

What happens if you supply three different floats (positive and larger than zero) as arguments instead, and run the file again? For example:

geom.setLocalScale(0.5f,3f,0.75f);
geom2.scale(2.0f,.33f,2.0f);

Try various values and see what happens. Can you distort the blue cube to be thin and tall, and the yellow cube to be wide and short?

What just happened?

Just like translation, there are two Java methods—one for absolute and one for relative scaling:

There are also scale(x,y,z) and setLocalScale(x,y,z) methods that accept three float arguments instead of just one.

The x value controls the width, from the left to the right. The y value controls the height, from up to down. The z value controls the depth, towards you and away from you. Does this (x,y,z) pattern look familiar?