AndroidBenchmark (1.1) | 2011-09-26 14:01 |
AndroidSample_GoMyWay (1.0) | 2012-04-04 12:22 |
KinectJME (0.2) | 2012-01-16 19:12 |
lib-jar (2011-09-01) | 2011-09-01 15:18 |
locale_ja (1.0) | 2011-09-16 00:06 |
mikumikustudio (2011-09-02) | 2011-09-02 20:05 |
MMSAssetManagerForAndroid (0.21) | 2012-09-15 22:50 |
nativebullet (2011-10-15) | 2011-10-15 08:21 |
Samples (0.55) | 2011-09-03 01:23 |
前章で作成したサンプルは陰影が全く無いため全然3Dっぽくありません。これでは面白くないため、陰影を付けてみます。
陰影に必要なのはライトの設定です。jMonkeyEngineでは
の4種類のライトがサポートされています。
ライトを使う前にマテリアルをUnshadedからLightingに変更する必要があります。以下の行を書き換えます。
Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); mat.setColor("Color", ColorRGBA.Blue);
Material mat = new Material(assetManager, "Common/MatDefs/Light/Lighting.j3md"); // マテリアルをLightingに変更 mat.setBoolean("UseMaterialColors", true); // 色指定を有効にする。 mat.setColor("Ambient", ColorRGBA.Red); // 環境光の色 mat.setColor("Diffuse", ColorRGBA.Red); // 拡散光の色
以下のコードをsimpleInitApp()に追加します。
DirectionalLight dl = new DirectionalLight(); dl.setDirection(new Vector3f(1, 0, -5).normalizeLocal()); dl.setColor(ColorRGBA.White.mult(0.5f)); rootNode.addLight(dl);ここではDirectionalLightを設定しています。DirectionalLightは日光のように方向のあるライトです。
次に環境項を設定します。
先ほどはDirectionalLightのみを設定したため陰影がはっきりした画像になりました。次は環境光を設定してもう少し柔らかい表現にします。
以下のコードを追加します。
AmbientLight al = new AmbientLight(); al.setColor(ColorRGBA.White.mult(0.5f)); rootNode.addLight(al);
package mygame; import com.jme3.app.SimpleApplication; import com.jme3.light.AmbientLight; import com.jme3.light.DirectionalLight; import com.jme3.material.Material; import com.jme3.math.ColorRGBA; import com.jme3.math.Vector3f; import com.jme3.renderer.RenderManager; import com.jme3.scene.Geometry; import com.jme3.scene.shape.Box; /** * test * @author normenhansen */ public class Main extends SimpleApplication { public static void main(String[] args) { Main app = new Main(); app.start(); } @Override public void simpleInitApp() { flyCam.setMoveSpeed(50); // カメラ速度速度設定 Box b = new Box(Vector3f.ZERO, 1, 1, 1); Geometry geom = new Geometry("Box", b); Material mat = new Material(assetManager, "Common/MatDefs/Light/Lighting.j3md"); mat.setBoolean("UseMaterialColors", true); mat.setColor("Ambient", ColorRGBA.Red); mat.setColor("Diffuse", ColorRGBA.Red); geom.setMaterial(mat); rootNode.attachChild(geom); DirectionalLight dl = new DirectionalLight(); dl.setDirection(new Vector3f(1, 0, -5).normalizeLocal()); dl.setColor(ColorRGBA.White.mult(0.5f)); rootNode.addLight(dl); AmbientLight al = new AmbientLight(); al.setColor(ColorRGBA.White.mult(0.5f)); rootNode.addLight(al); } @Override public void simpleUpdate(float tpf) { //TODO: add update code } @Override public void simpleRender(RenderManager rm) { //TODO: add render code } }