最近の更新 (Recent Changes)

2013-10-23
2013-10-20
2013-09-12

Dernières dossier de presse

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

Wikiガイド(Guide)

サイドバー (Side Bar)

Lighting

前章で作成したサンプルは陰影が全く無いため全然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); // 拡散光の色

実行してみる。

何も表示されません。心配しないでください。これは正常な動作です。Lightingマテリアルを設定した場合、ライトが無い暗闇では何も見えません。

ライトを追加してみる

DirectionalLightを追加する

以下のコードを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は日光のように方向のあるライトです。

実行してみる

陰影が付きました。

AmbientLightを追加する

次に環境項を設定します。

先ほどは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
    }
}

動画

YouTube http://youtu.be/6XGnGIkqWsg

ニコニコ動画 http://www.nicovideo.jp/watch/sm15635117

jME3チュートリアル