最近の更新 (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)

サンプルプログラム説明

このページではサンプルプログラムの中身を解説します。

Assetsとは

Assetsとはプログラムで使用されるデータの集合です。

Assetsの構造

まずMikuMikuStudioでサンプルプログラムを開き、左側のProjectのツリー(赤○で囲った部分)を見て下さい。このProject Assetsというところにプログラムで使用するPMDモデルやテクスチャファイルなどが格納されています。

このサンプルでは初音ミクのモデルはModelの下に、モーションデータはmotionの下に格納されています。

toonの下にはトゥーンシェードで使用するビットマップが格納されています。

プログラムの構造

ProjectのツリーのSource Packageというところを展開するとMain.javaというファイルがあります。これがプログラム本体です。

Main.javaをダブルクリックするとファイルが開きます。

ソースコード

  1. package mygame;
  2. import com.jme3.app.SimpleApplication;
  3. import com.jme3.light.AmbientLight;
  4. import com.jme3.light.DirectionalLight;
  5. import com.jme3.light.PointLight;
  6. import com.jme3.math.ColorRGBA;
  7. import com.jme3.math.Vector3f;
  8. import com.jme3.scene.Geometry;
  9. import projectkyoto.jme3.mmd.CartoonEdgeProcessor;
  10. import projectkyoto.jme3.mmd.PMDNode;
  11. import projectkyoto.jme3.mmd.UpdateControl;
  12. import projectkyoto.jme3.mmd.vmd.VMDControl;
  13. import projectkyoto.mmd.file.VMDFile;
  14. /**
  15. * test
  16. * <p/>
  17. * @author kobayasi
  18. */
  19. public class Main extends SimpleApplication {
  20. PointLight pl;
  21. Geometry lightMdl;
  22. VMDControl vmdControl;
  23. public static void main(String[] args) {
  24. // com.jme3.system.JmeSystem.setLowPermissions(true);
  25. Main app = new Main();
  26. app.start();
  27. }
  28. @Override
  29. public void simpleInitApp() {
  30. flyCam.setMoveSpeed(50);
  31. // Load Model
  32. PMDNode pmdNode = (PMDNode) assetManager.loadModel("/Model/初音ミク.pmd");
  33. VMDFile vmd = (VMDFile) assetManager.loadAsset("/motion/ごまえミク.vmd");
  34. vmdControl = new VMDControl(pmdNode, vmd);
  35. pmdNode.addControl(vmdControl);
  36. pmdNode.addControl(new UpdateControl(pmdNode));
  37. vmdControl.setFrameNo(0);
  38. vmdControl.setPause(true);
  39. rootNode.attachChild(pmdNode);
  40. DirectionalLight dl = new DirectionalLight();
  41. dl.setDirection(new Vector3f(1, 0, -5).normalizeLocal());
  42. dl.setColor(ColorRGBA.White.mult(0.5f));
  43. rootNode.addLight(dl);
  44. AmbientLight al = new AmbientLight();
  45. al.setColor(ColorRGBA.White.mult(1.0f));
  46. rootNode.addLight(al);
  47. CartoonEdgeProcessor cartoonEdgeProcess = new CartoonEdgeProcessor();
  48. viewPort.addProcessor(cartoonEdgeProcess);
  49. cam.setLocation(new Vector3f(0, 10, 40));
  50. }
  51. float time = 0;
  52. @Override
  53. public void simpleUpdate(float tpf) {
  54. time += tpf;
  55. if (time > 5) {
  56. // start after 5 seconds.
  57. if (vmdControl != null) {
  58. vmdControl.setPause(false);
  59. }
  60. }
  61. }
  62. }

ソースはたったこれだけです。

順番に解説していきます。

クラス定義

  1. public class Main extends SimpleApplication {

MainクラスはSimpleApplicationクラスを継承しています。SimpleApplicationクラスは最も一般的なアプリケーションの機能を提供します。

main メソッド

  1. public static void main(String[] args) {
  2. // com.jme3.system.JmeSystem.setLowPermissions(true);
  3. Main app = new Main();
  4. app.start();
  5. }

Mainクラスのインスタンスを作成し、start()メソッドを呼んでいます。 startメソッドが呼ばれるとSimpleApplicationはまず設定ダイアログを表示し、ユーザーが設定した解像度やフレームレートでOpenGLを初期化し、メインウィンドウを表示します。

simpleInitApp メソッド

アプリケーションの初期化を行うメソッドです。

カメラ設定

  1. flyCam.setMoveSpeed(50);

SimpleApplicationでは標準でflyCamが用意されています。flyCamはユーザーのマウスやキーボード操作で自由に動かす事の出来るカメラです。 ここではカメラの移動速度を50にセットしています。

PMD,VMDファイル読み込み

  1. PMDNode pmdNode = (PMDNode) assetManager.loadModel("/Model/初音ミク.pmd");
  2. VMDFile vmd = (VMDFile) assetManager.loadAsset("/motion/ごまえミク.vmd");

PMDモデルとVMDモーションデータをassetsから読み込みます。

コントロール設定

  1. vmdControl = new VMDControl(pmdNode, vmd);
  2. pmdNode.addControl(vmdControl);
  3. pmdNode.addControl(new UpdateControl(pmdNode));

モーションを再生するためのコントロールをpmdNodeに設定します。

vmdControlはVMDファイルの再生を行うコントロールです。 各フレームごとにVMD再生、IK計算、物理演算を行いボーンの位置を更新します。

UpdateControlは表情モーフィングと、vmdControlで更新されたボーンの位置情報をジオメトリに反映させるコントロールです。

vmdControlの設定

  1. vmdControl.setFrameNo(0);
  2. vmdControl.setPause(true);

VMDファイルの再生位置を0フレーム目にセットし、再生を一時停止しています。

シーングラフに追加

  1. rootNode.attachChild(pmdNode);

rootNodeにPMDモデルを追加します。

ライト追加

  1. DirectionalLight dl = new DirectionalLight();
  2. dl.setDirection(new Vector3f(1, 0, -5).normalizeLocal());
  3. dl.setColor(ColorRGBA.White.mult(0.5f));
  4. rootNode.addLight(dl);
  5. AmbientLight al = new AmbientLight();
  6. al.setColor(ColorRGBA.White.mult(1.0f));
  7. rootNode.addLight(al);

ライトを追加しています。尚、ライトの追加を忘れると完全な暗闇になり、何も表示されなくなるので注意して下さい。

ここではDirectionalLight(方向のあるライト)とAmbientLight(環境光)を追加しています。

CartoonEdgeProcessor追加

  1. CartoonEdgeProcessor cartoonEdgeProcess = new CartoonEdgeProcessor();
  2. viewPort.addProcessor(cartoonEdgeProcess);

CartoonEdgeProcessorはトゥーンシェードの輪郭線を描くプロセッサーです。これを忘れると輪郭線が表示されなくなります。

カメラ初期位置設定

  1. cam.setLocation(new Vector3f(0, 10, 40));

カメラの初期位置を設定します。

simpleUpdate メソッド

  1. float time = 0;
  2. @Override
  3. public void simpleUpdate(float tpf) {
  4. time += tpf;
  5. if (time > 5) {
  6. // start after 5 seconds.
  7. if (vmdControl != null) {
  8. vmdControl.setPause(false);
  9. }
  10. }
  11. }

simpleUpdateメソッドは、各フレームごとに呼ばれるメソッドです。ここではプログラム開始後5秒間経つとvmdControl.setPause(false) を呼び、再生を開始しています。