SHOEISHA iD

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

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

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

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

たった3KBのコードで3DCGモデルが歌って踊ってアングルも操作できる! jQueryベースのライブラリでMMDデータを活用したWebGLコンテンツを作ろう

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


jThree開発の流れを理解しよう

 jThreeではWebGLの操作をjQuery化するために、独特の開発手順を採用しています。

  1. オンラインまたはローカルサーバーを立てる
  2. 画像などのデータファイルをサーバーにアップする
  3. HTMLファイルでcanvasタグのフレームとなる要素(通常はbody要素)を用意する
  4. GOMLファイル(jThree専用XML)に表示したい3Dオブジェクトを記述し、HTMLファイルと同じディレクトリに設置する
  5. JSファイルでGOMLファイルにリンクし、正しく表示されるか確認する
  6. 5のJSファイルでプラグインの機能を呼び出したり、オブジェクトにアニメーションやイベントなどの機能をjQueryのメソッドで付加したりして完成

 実際にこの手順通りである必要はありませんが、jThreeの仕様に慣れるまではこのとおりにするとよいでしょう。

jThreeを使ってみよう

 本記事では、マウスでコントロールできる立方体が描画されるところまでを紹介します。

 まず、記事に添付されているサンプルファイル(no1.zip)をダウンロードしてください。今回のサンプルとスクリプトが含まれています(no1.zip)。解凍後、そのままサーバーにアップロードするだけで動作を確認できます。サンプルでは5月15日時点の最新版jThree v1.5.1と、プラグインのjThree.Trackball.jsを利用しています。

 前述の手順のうち1は終わったものとし、2は不要なので3から解説します。

3. HTMLファイルでcanvasタグのフレームとなる要素
(通常はbody要素)を用意する

 canvasタグはjThreeが自動生成するため、そのフレームとなる要素のみを用意します。

 WebGLコンテンツは大抵ページいっぱいに表示しますので、今回はbodyタグをフレームにします。

 絶対配置で幅・高さともに100%になるようCSSで指定します。記事の都合上、style要素による埋め込みスタイルシートを利用します。

canvasタグのフレーム要素のサンプル(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;
		}
		</style>
		<!-- jThreeの前に必ずjQueryを読み込んでください -->
		<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
		<script src="script/jThree.js"></script>
		<script src=”script/jThree.Trackball.js”></script>
		<script src="index.js"></script>
	</head>
	<body>
		<!-- ココにcanvasタグが自動生成されます -->
	</body>
</html>
4. GOMLファイル(jThree専用XML)に表示したい3Dオブジェクトを記述し、
HTMLファイルと同じディレクトリに設置する

 GOMLファイルはjThree専用のXMLファイルですが、HTMLの記述との共通部分が多く、覚えやすいのが特徴です。

 GOMLファイル内の要素に記述した相対URLは、ページのHTMLファイルを基準にするため、同じディレクトリに設置すると混乱しなくてすみます。

GOMLファイルサンプル(index.goml)
<?xml version="1.0" encoding="UTF-8"?>
<goml>
	<head>
		<gmt id="Gmt" type="Cube" param="3 3 3" />
		<rdr frame="body" camera="camera:first"/>
		<!-- rdr要素はcanvasタグを生成し、描画するレンダラーです。
		frame属性にWebGLのフレームとなるHTML要素のjQueryセレクタを指定できます。
		camera属性には3D空間の撮影に使うGOMLファイル内のcamera要素をjQueryセレクタで指定できます。
		上記のframe属性とcamera属性の値はデフォルトで設定されているので省略して<rdr/>と記述することができます。 -->
	</head>
	<body>
		<!-- body直下にはscene要素のみいくつでも設置できます -->
		<scene>
			<!-- scene要素の下に3Dオブジェクトを配置します -->
			<camera style="positionZ: 10;" />
			<mesh gmt="#Gmt" />
		</scene>
	</body>
</goml>
5. JSファイルでGOMLファイルにリンクし、正しく表示されるか確認する

 GOMLファイルをサーバーに設置しただけでは何も表示されませんので、jQuery・$オブジェクトを拡張したjThreeオブジェクトを利用します。

 gomlメソッドにGOMLファイルのURLを渡すだけで、HTMLのDOM要素構築完了後にGOMLのDOM要素を構築・描画してからコールバック関数を呼び出してくれます。

 jQuery・$オブジェクトは一切改変されないので、通常通り使用できます。

JSファイルサンプル(index.js)
jThree.goml( "index.goml", function( j3 ) {
	j3.Trackball();//jThree.Trackball.jsを読み込むとこれだけでカメラコントロールが有効になります。
	//GOMLの内容を表示するだけならこのコールバック関数は不要です。
	//第一引数にjThreeオブジェクトが渡されるので手間を省くためにj3に置き換えてます。
	//MMDプラグインと共に使うammo.jsと競合するためグローバル空間では変数名に「j3」を使わないでください。
	//今回は解説しませんがjThreeオブジェクトをjQueryのように使ってGOMLファイル内の要素にアクセスできます。
} );

 ブラウザでindex.htmlにアクセスして、画像のような真っ黒なcanvasタグと立方体が生成されれば成功です。

 マウスで動かせますので、右・左・ホイールボタンで操作してみてください。立方体の色は毎回ランダムで変わります。

6. 5のJSファイルでプラグインの機能を呼び出す

 サンプルのコメントにすでに書いてありますが、

j3.Trackball();

でマウスコントロールを有効にしています。

まとめ

 本記事ではこのjThreeについて、MMDプラグインを含めた機能の紹介と独特なコーディング手順を説明するとともに、Canvasを自動生成し、マウスで動かせる立方体を描画してみました。

 次回からGOMLファイルの記述について詳しく解説していきます。

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

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

もっと読む

この記事の著者

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

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

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

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

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/7784 2014/05/30 17:42

イベント

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

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

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

メールバックナンバー