見出し画像

ティラノスクリプトの3D その3:init.ks

読者の方としてみれば、一応出来てるんなら、もったいぶらずにさっさと全部公開しろと言いたい所だと思いますが、実の所一応動いてはいますが、何の心配もなく使える状態か今一自信がありません。この init.ks も最初の記事以降修正しました。
ですので、我慢して読んでいってください。
以下、プラグインの最初のソース init.ks です。

[iscript]
	array_scripts = [
		//"./data/others/plugin/extend3D/three.js",
		//"./data/others/plugin/extend3D/loaders/GLTFLoader.js",
		//"./data/others/plugin/extend3D/loaders/OBJLoader.js",
		//"./data/others/plugin/extend3D/loaders/MTLLoader.js",
		//"./tyrano/libs/three/controls/TransformControls.js",
		"./data/others/plugin/extend3D/ammo.js",
		"./data/others/plugin/extend3D/loaders/AmmoPhysics.js",
		"./data/others/plugin/extend3D/animation/CCDIKSolver.js",
		"./data/others/plugin/extend3D/loaders/MMDLoader.js",
		"./data/others/plugin/extend3D/libs/mmdparser.js",
		"./data/others/plugin/extend3D/animation/MMDAnimationHelper.js",
		"./data/others/plugin/extend3D/animation/MMDPhysics.js",
		"./data/others/plugin/extend3D/shaders/MMDToonShader.js",
		"./data/others/plugin/extend3D/loaders/TGALoader.js",
		//"./data/others/plugin/extend3D/controls/OrbitControls.js",
		"./data/others/plugin/extend3D/effects/OutlineEffect.js",
		"./data/others/plugin/extend3D/loaders/TDSLoader.js",
		"./data/others/plugin/extend3D/loaders/ColladaLoader.js",
		"./data/others/plugin/extend3D/loaders/FBXLoader.js",
		"./data/others/plugin/extend3D/libs/fflate.min.js",
	]
	//debugger;
	//複数のスクリプトを一括して読み込み、但し前のスクリプトの読み込みが終わるまで次の読み込みは行わない。
	var array_size = array_scripts.length;
	var arr_id = 0;
	if( 0 < array_size ){
		function get_Script(src) {
			$.getScript(src, function() {
				if( 0 < src.indexOf('ammo',20) ){
					Ammo().then( function( AmmoLib ) {
						Ammo = AmmoLib;
					});
				}
				arr_id++;
				if( arr_id < array_size ){
					get_Script(array_scripts[arr_id]);
				}
			});
		};
		get_Script(array_scripts[arr_id]);
	}
	//Ammo().then( function ( AmmoLib ) {
	//	Ammo = AmmoLib;
	//});
//https://unpkg.com/three@0.147.0/build/three.js';
[endscript]
[loadjs storage="/plugin/extend3d/extend3D.js"]
[macro name="3d_dome_new"]
[3d_dome *]
[endmacro]
[macro name="ammo_init"]
;[iscript]
;	Ammo().then( function ( AmmoLib ) {
;		Ammo = AmmoLib;
;	});
;[endscript]
[endmacro]

init.ks では、追加で必要なライブラリをロードするのが主な機能で、最後に
[loadjs storage="/plugin/extend3d/extend3D.js"]
で、拡張3D機能を記述した、コードを読み込んでます。いたるところにコメントの//や;があります。これらは、削除して構わないコードですが、失敗の残骸という意味で読者の方々の参考ということで、残しています。
最初に array_scripts にロードするライブラリ一式を格納してます。簡単に中身の説明をしていきます。
three.js: three.js の本体です。既にティラノの側でロードしてますのでコメントアウトしてます。
GLTFLoader.js: GLTF形式モデルのファイルのローダーです。これもティラノの側でロードしてます。
同様に、OBJLoader.js, MTLLoader.js は、OBJ形式ファイルのローダー、
TransformControls.js は、モデルの汎用の変形制御ライブラリです。
ammo.js: 物理現象シミュレーターです。今の所MMDでの髪の毛やスカートの揺れを計算するのに使います。ただ、このライブラリはちょっと癖があって注意が必要です。
AmmoPhysics.js: ammo.js を操作するライブラリです。
CCDIKSolver.js: ボーンを使ったモデルの変形でIK(インバースキマネティック)の計算を行います。これも今の所MMDだけに使われます。
MMDLoader.js: MMDのPMX/PMDファイルをロードします。
mmdparser.js: MMDのファイルの解析ツールです。
MMDAnimationHelper.js: MMDのアニメション時にthree.js でのMixserにアニメーションを任せると、物理計算やIK計算を同期して実行出来ないので、こちらでそれらの管理を行います。
MMDPhysics.js: MMDの物理の動作を制御します。
MMDToonShader.js: MMDのアニメ調シェーディングを管理します。
TGALoader.js: TGAイメージファイルのローダーです。
OrbitControls.js: ホントは、[3d_debug]に使われているのですが、バグが有って使えません。ティラノの作者の方が治してくれるのを期待してます。
OutLineEffect.js: 多分アニメ調の枠取り用のライブラリと思いますが、よくわかりません。
TDSLoader.js: 有名な3DSMaxの3dsファイル用のローダーです。
ColladaLoader.js : Collada形式のファイルのローダーです。
FBXLoader.js: FBX型式のファイルのローダーです。
fflate.min.js: javascript 向けの圧縮/解凍ライブラリです。
以上のライブラリをその下のコードで読み込みます。ただ、ちょっと変な記述です。普通に foreach を使わないのかというと、$.getScript()関数は、ロードを別スレッドで実行してすぐ戻ってきます。ですので、foreachだと、全てのロードが、順不同かつ同時に起こって不安定になることの対策です。この記述は、本家のティラノスクリプトのライブラリロードの記述法を参考にしました。
で、getScriptの終了時のコールバックの中に、Ammo().then….の一連の記述ですが、ammo.jsを使うときこのおまじないをしないとエラーのなる・・らしいです。ライブラリロード処理ループの後に同じ記述をコメントアウトしてますが、最初ここに書いたところammoのロードが終わってないので、ないよと怒られました。それで、それ用のマクロを書いて後でスクリプト内で読もうとしたりしましたが、これも今一だったのですが、今のこの記述で何とかうまく動いてます。
最後にマクロで、[3d_dome_new] を定義してますが、これは、現在の実装で、スカイドームの生成とテクスチャーの張替の両方共 [3d_dome] だけで実現していますが、普通、newを付けて生成、new無しで修正という使い方が分かり易いと思って追加しただけです。
次回は、そのスカイドームを作る [3d_dome] の説明をします。

いいなと思ったら応援しよう!