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 |
このページではサンプルプログラムの中身を解説します。
Assetsとはプログラムで使用されるデータの集合です。
まずMikuMikuStudioでサンプルプログラムを開き、左側のProjectのツリー(赤○で囲った部分)を見て下さい。このProject Assetsというところにプログラムで使用するPMDモデルやテクスチャファイルなどが格納されています。
このサンプルでは初音ミクのモデルはModelの下に、モーションデータはmotionの下に格納されています。
toonの下にはトゥーンシェードで使用するビットマップが格納されています。
ProjectのツリーのSource Packageというところを展開するとMain.javaというファイルがあります。これがプログラム本体です。
Main.javaをダブルクリックするとファイルが開きます。
ソースコード
- package mygame;
- import com.jme3.app.SimpleApplication;
- import com.jme3.light.AmbientLight;
- import com.jme3.light.DirectionalLight;
- import com.jme3.light.PointLight;
- import com.jme3.math.ColorRGBA;
- import com.jme3.math.Vector3f;
- import com.jme3.scene.Geometry;
- import projectkyoto.jme3.mmd.CartoonEdgeProcessor;
- import projectkyoto.jme3.mmd.PMDNode;
- import projectkyoto.jme3.mmd.UpdateControl;
- import projectkyoto.jme3.mmd.vmd.VMDControl;
- import projectkyoto.mmd.file.VMDFile;
- /**
- * test
- * <p/>
- * @author kobayasi
- */
- public class Main extends SimpleApplication {
- PointLight pl;
- Geometry lightMdl;
- VMDControl vmdControl;
- public static void main(String[] args) {
- // com.jme3.system.JmeSystem.setLowPermissions(true);
- Main app = new Main();
- app.start();
- }
- @Override
- public void simpleInitApp() {
- flyCam.setMoveSpeed(50);
- // Load Model
- PMDNode pmdNode = (PMDNode) assetManager.loadModel("/Model/初音ミク.pmd");
- VMDFile vmd = (VMDFile) assetManager.loadAsset("/motion/ごまえミク.vmd");
- vmdControl = new VMDControl(pmdNode, vmd);
- pmdNode.addControl(vmdControl);
- pmdNode.addControl(new UpdateControl(pmdNode));
- vmdControl.setFrameNo(0);
- vmdControl.setPause(true);
- rootNode.attachChild(pmdNode);
- 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(1.0f));
- rootNode.addLight(al);
- CartoonEdgeProcessor cartoonEdgeProcess = new CartoonEdgeProcessor();
- viewPort.addProcessor(cartoonEdgeProcess);
- cam.setLocation(new Vector3f(0, 10, 40));
- }
- float time = 0;
- @Override
- public void simpleUpdate(float tpf) {
- time += tpf;
- if (time > 5) {
- // start after 5 seconds.
- if (vmdControl != null) {
- vmdControl.setPause(false);
- }
- }
- }
- }
ソースはたったこれだけです。
順番に解説していきます。
MainクラスはSimpleApplicationクラスを継承しています。SimpleApplicationクラスは最も一般的なアプリケーションの機能を提供します。
Mainクラスのインスタンスを作成し、start()メソッドを呼んでいます。 startメソッドが呼ばれるとSimpleApplicationはまず設定ダイアログを表示し、ユーザーが設定した解像度やフレームレートでOpenGLを初期化し、メインウィンドウを表示します。
アプリケーションの初期化を行うメソッドです。
SimpleApplicationでは標準でflyCamが用意されています。flyCamはユーザーのマウスやキーボード操作で自由に動かす事の出来るカメラです。 ここではカメラの移動速度を50にセットしています。
PMDモデルとVMDモーションデータをassetsから読み込みます。
モーションを再生するためのコントロールをpmdNodeに設定します。
vmdControlはVMDファイルの再生を行うコントロールです。 各フレームごとにVMD再生、IK計算、物理演算を行いボーンの位置を更新します。
UpdateControlは表情モーフィングと、vmdControlで更新されたボーンの位置情報をジオメトリに反映させるコントロールです。
VMDファイルの再生位置を0フレーム目にセットし、再生を一時停止しています。
rootNodeにPMDモデルを追加します。
ライトを追加しています。尚、ライトの追加を忘れると完全な暗闇になり、何も表示されなくなるので注意して下さい。
ここではDirectionalLight(方向のあるライト)とAmbientLight(環境光)を追加しています。
CartoonEdgeProcessorはトゥーンシェードの輪郭線を描くプロセッサーです。これを忘れると輪郭線が表示されなくなります。
カメラの初期位置を設定します。
simpleUpdateメソッドは、各フレームごとに呼ばれるメソッドです。ここではプログラム開始後5秒間経つとvmdControl.setPause(false) を呼び、再生を開始しています。