SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

jQueryの記法でWebGLを操作できるライブラリ「jThree」の活用

表現の幅を広げるWebGLライブラリ「jThree」の公式プラグイン

jQueryの記法でWebGLを操作できるライブラリ「jThree」の活用 第5回

オーディオタグとMMDアニメーションを連携させる

 いよいよMMDモデルとカメラをアニメーションさせる方法を紹介します。音源に合わせてモデルを躍らせるケースが大半なのでオーディオタグとの連携を軸に解説します。

 今回のサンプルではボーカロイド楽曲で有名な「メルト」のMP3ファイルを使用します。サンプルzipには同梱しておりませんのであらかじめ『初音ミク が オリジナル曲を歌ってくれたよ「メルト」』のページ上部説明文中の「mp3とか→」URLにアクセスしてダウンロードし、audioディレクトリ内に「melt.mp3」というファイル名でアップしてください。

 それでは画面上にHTMLのaudio要素を設置します。

audio要素設置のサンプル(index.html)
<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="UTF-8">
        <title>jThreeサンプル</title>
        <style>
        body {
            position: fixed;
            width: 100%;
            height: 100%;
            margin: 0;
            padding: 0;
        }
        audio {
            width: 300px;
            position: fixed;
            bottom: 20px;
            left: 50%;
            margin-left: -150px;
        }
        </style>
        <!-- jThreeの前に必ずjQueryを読み込んでください -->
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
        <script src="http://cdnjs.cloudflare.com/ajax/libs/jquery-easing/1.3/jquery.easing.min.js"></script>
        <script src="script/jThree.js"></script>

        <!--MMDを利用する場合はammo.jsの読み込みを必ず行ってください-->
        <script src="script/ammo.js"></script>
        <script src="script/jThree.MMD.js"></script>

        <script src="script/jThree.Trackball.js"></script>
        <script src="index.js"></script>
    </head>
    <body>
        <!-- ココにcanvasタグが自動生成されます -->
        <audio src="audio/melt.mp3" controls></audio>
    </body>
</html>

 MMD関連のアニメーションは、

jThree.MMD.play();
jThree.MMD.pause();
jThree.MMD.seek( time );

で一括管理できます。要素ごとの個別管理も可能ですが今回は解説しません。

オーディオタグとMMDアニメーション連携のサンプル(index.js)
function drawFloor( ctx ) {

    var base = "#fff",
        color = "#2ff";

    //ctx = canvas2D context
    ctx.fillStyle = base;
    ctx.fillRect(0, 0, 32, 32);
    ctx.fillStyle = color;
    ctx.fillRect(0, 0, 16, 16);
    ctx.fillStyle = base;
    ctx.fillRect(8, 8, 8, 8);
    ctx.fillStyle = color;
    ctx.fillRect(16, 16, 16, 16);
    ctx.fillStyle = base;
    ctx.fillRect(24, 24, 8, 8);

}

jThree.goml( "index.goml", function( j3 ) {

    j3.Trackball();

    ( function() {
        j3( "mesh:first" ).animate( { rotateY: "-=3.14" }, 60000, "easeInOutCubic", arguments.callee );
    } )();

    var audio = $( "audio" );

    audio.on( "play", jThree.MMD.play );
    audio.on( "ended pause", jThree.MMD.pause );
    audio.on( "seeked", function() {
        jThree.MMD.seek( this.currentTime );//単位は秒です
    } );

} );

 ここまでできたらindex.htmlにアクセスしてみましょう。モデルが描画されていることを確認してからオーディオを再生してシークも試してみてください。実際の運用ではモデルの描画が完了した後でオーディオ要素を表示するようにすべきです。

 jThreeのDOM構築待機関数はモデルやモーションの読み込み・描画完了を補足しておらず必ず先に呼ばれてしまいます。代わりに「model」「motion」「mmd」要素に必要なだけonLoad属性を指定して独自に読み込み完了処理を施してください。mmd要素のonLoad属性はmodelとmotionの両方(model属性のみ指定の場合はmodelのみ)が読み込まれ、描画が完了した時点で呼び出されます。

まとめ

 今回まででjThreeの基礎は一通り終わりました。サンプルのファイルコーディング量はHTMLファイルからコメントまですべて合わせて3.66KBです。このように非常に少ない記述量でクオリティの高いWebGLコンテンツを作れるのがjThreeの魅力です。次の最終回ではjThreeプレイヤーの使い方を紹介します。

 MMDデータのオーディオ要素連携から今回紹介したプラグインほぼすべての機能までほとんどコーディングなしで利用できるようになります。

素材提供

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
jQueryの記法でWebGLを操作できるライブラリ「jThree」の活用連載記事一覧

もっと読む

この記事の著者

松田 光秀(jThree合同会社)(マツダ ミツヒデ)

jQueryの記法で操作できるWebGLライブラリ「jThree」の開発者でjThree合同会社の代表。JavaScriptのスキルのみで平成26年2月に1人で起業する。平成元年生まれの24歳で現役高校生(平成26年5月時点)。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/7826 2014/06/30 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー