Dxlib   [w]




================================================================================
-- Dxlib Extension 20230623
-- Live2D 3.X以降 と MMDまわり と Effekseer3D
--
-- https://dxlib.xsrv.jp/
================================================================================
■最新の変更点
20230623	オブジェクト全破壊時に、Live2Dモデルの解放処理が行われていなかったのを修正

20220826	いくつかの不具合の修正

20220825	SetClearColorの追加(仮想画面のクリア色を指定できます)
			描画方式の変更により、Dxlibオブジェクトへのエフェクトが適用されるようになります

-----------------------------------------------------------
動作までの配置
CF25\Extensions\Unicode\Dxlib.mfx
CF25\Data\Runtime\Unicode\Dxlib.mfx

----------------------------------
動作に必要なDLLについて
d3dx9d_43.dll
を使用しています。

公式によるDLL取得はこのパッケージのインストール
https://www.microsoft.com/ja-jp/download/details.aspx?id=35

-----------------------------------------------------------
 d3dx9d_43.dllを手動で入れる場合に必要な箇所

c:\windows/system32/d3dx9d_43.dll
ここに入れる

もしくは・・・(例)
C:\Program Files\Clickteam Fusion Developer 2.5\d3dx9d_43.dll
C:\Program Files\Clickteam Fusion Developer 2.5\Runtime\Unicode\d3dx9d_43.dll
に配置が必要

※CFアプリのビルド時にd3dx9d_43.dllが組み込まれるのでエンドユーザーへの追加DLL配布は不要

-----------------------------------------------------------
■Live2Dを利用するには Live2DCubismCore.dll が必要です。

プロジェクト(mfa)と同フォルダ内、もしくは
C:\Program Files\Clickteam Fusion Developer 2.5\Runtime\Unicode\Live2DCubismCore.dll
への配置が必要です。


入手に関しては以下の通り 

 Live2D Cubism 4 SDK for Native ダウンロードページ
https://www.live2d.com/en/download/cubism-sdk/
※Live2D Cubism 4 SDK for Native の中に Live2DCubismCore.dll はあります

ダウンロードページに記載されている英文の利用規約の日本語版はこちら
 Live2D Open Software 使用許諾契約書
https://www.live2d.com/eula/live2d-open-software-license-agreement_jp.html

 Live2D Proprietary Software 使用許諾契約書
https://www.live2d.com/eula/live2d-proprietary-software-license-agreement_jp.html


※このアーカイブに付属させているDLLは3.X系です

--------------------------------------------------------------------------------
■動作仕様について

Live2D 3.X〜 と MMDまわりの3D機能を移植実装しています。


CF25が動作するDirectX9の動作では、頂点計算がハードウェア動作を有効になっているわけではありません。
(そもそも2Dでは必要無い)

DxLib内では、このハードウェアによる頂点計算をフルに使用する為
CF25が動作するDirectX9以外に、頂点計算のハードウェア動作を有効にしたDirectX9を並行して動作させています

内部では頂点計算を有効にしたハードウェアによるレンダリング後の画像をCF25に転送している為
動作パフォーマンスが最大とは行きませんが
ハードウェア無しの動作に比べたら圧倒的に高速なのでこの方式で動作させています。

================================================================================

各種命令セットはDxLibがベースとなっている為
実装には、よりプログラミングに近い考え方が必要になるかもしれません。

ベースとなって居るDxlib関数のリファレンスはこちら
https://dxlib.xsrv.jp/function/dxfunc_3d.html

一通り必要そうな機能を移植していますが完全な移植ではありません。
要望があれば別途追加するかもしれません。

================================================================================
■DxLibを使ったMMD関係について

https://dxlib.xsrv.jp/function/dxfunc_3d_model_0.html
詳しい仕様はDxlibのMMD関係の文献に任せるとして、軽くまとめると

読み込めるファイル形式は x, mqo, mmd(vmd), mv1がサポートされています

mqoはメタセコイアのファイル形式。
mmd(vmd)はMMDのファイル形式。
mv1はDXLib専用のファイル形式。

DXLibをDLしたときに付属でついてくるDxLibModelViewerでmv1形式で保存できます。
DxLibModelViewerで扱えるファイル形式はx, mqo, mmd(vmd), mv1, fbxの5つ。

読み込みに掛かる実行速度や、ファイルサイズはmv1形式の方がパフォーマンスが高いので変換する事をお勧めします。
mmd(vmd)形式でも、MMD上の動作を完全に再現している訳ではないので
やはりDxLibModelViewerで動作を確認しつつ、変換保存するのがやはり無難でしょう。


モーションデータの読み込みについては
読み込むモデルファイルのファイル名に000〜の数値が付けられたファイルがある場合に読み込まれます。
例)
Miku.pmx		モデルファイル
Miku000.vmd		モーションファイル
Miku001.vmd		
Miku002L.vmd	Lが付くと、ループモーションとして扱われる

※リンク元の記事に詳しく書かれています

DxLibModelViewerからアニメーションファイルも読み込んだ上でmv1形式で保存した場合
アニメーションファイルもmv1形式として1ファイルに纏められるので、やはりお勧めです。

================================================================================
■既知の問題
アクティブオブジェクト等の描画オブジェクトが一つも配置されていない場合、エクステンションの描画に失敗する

================================================================================
■Condition
MV1Loaded_Async
	アクションMV1LoadModel_Asyncによるデータのロードが完了した際に発現します

================================================================================
■Action

□MMD-Model
	MV1SetLoadModelUsePhysicsMode( val )
		MMDモデルをロードした際に、モデルのタイプを指定します
		(0:DX_LOADMODEL_PHYSICS_LOADCALC 1:DX_LOADMODEL_PHYSICS_DISABLE 2:DX_LOADMODEL_PHYSICS_REALTIME)
		0:物理演算を事前に計算してロードする
		1:物理演算を使用しない
		2:リアルタイムで物理演算を行う

	MV1SetLoadModelPhysicsWorldGravity( float )
		物理演算に使われる重力値を指定します
	---------------------------------------------------
	MV1LoadModel( path )
		モデルデータを読み込みます
		読み込み完了後は getLoadedMHandle_MMDからID(MHandle)を取得し、モデルデータを扱います
	
	MV1LoadModel_Async( path )
		非同期でモデルデータを読み込みます
		ロードが完了した場合 Conditionの MV1Loaded_Async が発生します
	---------------------------------------------------
	MV1DuplicateModel( MHandle )
		ロード済みモデルデータの複製を行います
		複製後のモデルは getLoadedMHandle_MMDからID(MHandle)を取得します
	
	MV1DeleteModel( MHandle )
		モデルデータの削除を行います
	---------------------------------------------------
	□Physics
		MV1PhysicsCalculation( MHandle , time(float) )
			モデルデータの物理計算の時間を設定します
		
		MV1PhysicsResetState( MHandle )
			モデルデータの物理計算をリセットします
	---------------------------------------------------
	□Position & Animation
		MV1SetPosition( MHandle , x(float) , y(float) , z(float) )
			モデルデータの座標を設定します
		
		MV1SetScale( MHandle , sx(float) , sy(float) , sz(float) )
			モデルデータのスケールを設定します
		
		MV1SetRotationXYZ( MHandle , rx(float) , ry(float) , rz(float) )
			モデルデータの回転を設定します
		
		MV1SetVisible( MHandle , val )
			モデルデータの表示を設定します
		
		MV1SetOpacityRate( MHandle , val(float) )
			モデルデータの透過率を設定します
		---------------------------------------------------
		MV1AttachAnim( MHandle , AnimIndex , AnimSrcMHandle , NameCheck )
			モデルデータにアニメーションを設定します
				※DxlibのリファレンスMV1AttachAnimを参照
				AnimIndex: アタッチするアニメーション番号
				AnimSrcMHandle: アタッチするアニメーションを持っているモデルのハンドル( -1 を渡すと MHandle と同じモデルハンドルが使用されます )
				NameCheck: AnimSrcMHandle が -1 以外の場合にアタッチするアニメーションの
							フレームの名前とアタッチされる側のモデルのフレームの名前が一致していない場合アタッチしないかどうか( TRUE:アタッチしない FALSE:アタッチする )
							この引数は AnimSrcMHandle が -1 の場合は無視されます
				
				DxlibによるMMDモデルとアニメーション動作の仕様として、ファイル名に命名規則があります。
				アニメーションファイルvmdは、読み込みモデル名に番号を付けた形で用意しておく必要があります。
				例)
				miku.mv1
				miku000.vmd…miku001.vmd…miku010.vmd
				このアニメーションファイル数字部分がAnimIndexと連動しています
			
			
		MV1DetachAnim( MHandle , AttachIndex )
			モデルデータからアニメーションをデタッチします
			
		MV1SetAttachAnimTime( MHandle , AttachIndex , time(float) )
			モデルデータにアタッチしているアニメーションの再生時間を設定します
		
		MV1SetAttachAnimBlendRate(MHandle , AttachIndex , rate(float 0.0 - 1.0) )
			アタッチしているアニメーションのブレンド率を設定します
			※歩きモーションから走りモーションへの移行する場合等で使うと、滑らかに見えるようになります
			
		---------------------------------------------------
		□Frame
			MV1SetFrameVisible( MHandle , FrameIndex , VisibleFlag (1:on 0:off) )
				フレームの表示・非表示状態を変更します
			
			MV1SetFrameUserLocalMatrix( MHandle , FrameIndex , Matrix(input) )
				フレームの座標変換行列を設定します
				
			MV1ResetFrameUserLocalMatrix( MHandle , FrameIndex )
				フレームの座標変換行列をデフォルトに戻します
				
			---------------------------------------------------
			MV1GetFrameLocalMatrix( Matrix name(output) , MHandle , FrameIndex )
				フレームの座標変換行列を取得します
			
			MV1GetFrameLocalWorldMatrix( Matrix name(output) , MHandle , FrameIndex )
				フレームのローカル座標からワールド座標に変換する行列を取得します
				
			MV1GetFramePosition( VECTOR name(output) , MHandle , FrameIndex )
				フレームの座標を取得します
				
		---------------------------------------------------
		MV1SetMaterialOutLineDotWidth( MHandle , width(float) )
			モデルデータのアウトライン幅を設定します
		
		MV1SetMaterialOutLineColor( MHandle , r(float) , g(float) , b(float) , a(float)  )
			モデルデータのアウトライン色を設定します
		---------------------------------------------------
		MV1SetMatrix( MHandle , Matrix name(input) )
			モデルデータにMatrix(姿勢情報)を設定します
		
		MV1GetMatrix( MHandle , Matrix name(output) )
			モデルデータに設定されているMatrixを取得します
			
		---------------------------------------------------
		□ShadowMap
			MakeShadowMap( width(^2) , height(^2) )
				シャドウマップを作成します ※作成するシャドウマップは2の累乗の数値である事が望ましい(256,512,1024…)
				作成されたシャドウマップは getMakeShadowMapHandle よりID(SmHandle)を取り出します。
			
			SetShadowMapDrawArea( SmHandle , min(x) float , min(y) float , min(z) float
											 max(x) float , max(y) float , max(z) float )
				シャドウマップに描画する範囲を設定します
				
			SetShadowMapLightDirection( SmHandle , dir(x) float , dir(y) float , dir(z) float )
				シャドウマップへの描画で想定するライトの方向を設定します
				
			---------------------------------------------------
			AddShadowMapMV1Object( SmHandle , MHandle )
				シャドウマップを適用するモデルデータを設定します
				
			DelShadowMapMV1Object( SmHandle , MHandle )
				シャドウマップからモデルデータの適用を外します
			
		---------------------------------------------------
		□Collision
			MV1SetupCollInfo( MHandle , FrameIndex (-1:all) , XDivNum , YDivNum , ZDivNum )
				モデルデータからコリジョン情報を構築します
					FrameIndex : コリジョンの情報を構築するフレームの番号
					XDivNum : コリジョン情報のX軸方向の空間分割数
					YDivNum : コリジョン情報のY軸方向の空間分割数
					ZDivNum : コリジョン情報のZ軸方向の空間分割数
			
			MV1RefreshCollInfo( MHandle , FrameIndex (-1:all) )
				コリジョン情報を更新します
				※動作させないモデルをコリジョンポリゴンとして使用している場合は呼ぶ必要はありません
				
			MV1TerminateCollInfo( MHandle , FrameIndex )
				コリジョン情報の後始末をします
			
			---------------------------------------------------
			MV1CollCheck_Line( MHandle , FrameIndex , start VECTOR , end VECTOR )
				線分とモデルの当たり判定をチェックします
				※チェックの結果は、getHitNum , getHitDim_HitPositionなどで取り出します
				
			MV1CollCheck_Sphere( MHandle , FrameIndex , CenterPos VECTOR , r(float) )
				球とモデルの当たり判定をチェックします
			
			MV1CollCheck_Capsule( MHandle , FrameIndex , Pos1 VECTOR , Pos2 VECTOR , r(float) )
				カプセルとモデルの当たり判定をチェックします
			
		---------------------------------------------------
		□CF-Screen
			CFScreenToSetPosition( MHandle , x(cf pos x) , y(cf pos x) )
				モデルデータをCF25基準の座標位置にセットします
			
	---------------------------------------------------
	□Camera
		SetCameraNearFar( Near(float) , Far(float))
			カメラの手前クリップ距離と奥クリップ距離を設定する
			
		SetCameraPositionAndTarget_UpVecY( cam x(float) , cam y(float) , cam z(float) , target x(float) , target y(float) , target y(float) )
			カメラの視点、注視点を設定する( 上方向はY軸から算出 )
			
		---------------------------------------------------
		SetUseLighting( flg )
			ライティング計算処理を使用するかどうかを設定する
			
		SetGlobalAmbientLight( r(float) , g(float) , b(float) )
			グローバルアンビエントライトカラーを設定する
			
		---------------------------------------------------
		SetCameraViewMatrix( Matrix name(input) )
			ビュー行列を直接設定する
			
		GetCameraViewMatrix( Matrix name(output) )
			カメラのビュー行列を取得する
		
		SetupCamera_ProjectionMatrix( Matrix name(input) )
			射影行列を設定する
		
		GetCameraProjectionMatrix( Matrix name(output) )
			カメラの射影行列を取得する
			
		---------------------------------------------------
		SetupVMDCameraMotionParam( MHandle(camera) , time(float) )
			モーション入りカメラの再生時間を設定します
			
	---------------------------------------------------
	□MATRIX
		MGetIdent( Matrix name(input) )
			単位行列を取得する
			
		MGetScale( Matrix name(input) , x(float) , y(float) , z(float) )
			拡大行列を取得する
			
		MGetTranslate( Matrix name(input) , x(float) , y(float) , z(float) )
			平行移動行列を取得する
			
		MGetRotX( Matrix name(input) , rotate(float) )
			X軸回転行列を取得する
			
		MGetRotY( Matrix name(input) , rotate(float) )
			Y軸回転行列を取得する
			
		MGetRotZ( Matrix name(input) , rotate(float) )
			Z軸回転行列を取得する
			
		---------------------------------------------------
		MAdd( Matrix name(output) , Matrix name 1(input) , Matrix name 2(input) )
			二つの行列の足し算を行う
			
		MMult( Matrix name(output) , Matrix name 1(input) , Matrix name 2(input) )
			二つの行列の乗算を行う
			
		MScale( Matrix name(output) , Matrix name(input) , scale(float) )
			行列のスケーリングを行う
			
		MTranspose( Matrix name(output) , Matrix name(input) )
			転置行列を取得する
			
		MInverse( Matrix name(output) , Matrix name(input) )
			逆行列を取得する
			
		---------------------------------------------------
		SetMatrixVal( Matrix name(input) , mat[y][]  0-3 , mat[][x]  0-3 , val(float) )
			行列に値を設定する
			
	---------------------------------------------------
	□VECTOR
		SetVectorVal( Vector name(input) , x(float) , y(float) , z(float) )
			ベクトル(構造体)に値を設定します
		
---------------------------------------------------
□LIVE2D
	Live2D_LoadModel( path )
		Live2D のモデルファイルを読み込む
		読み込み完了後は getLoadedLive2DModelHandle からID(Live2DModelHandle)を取得し、モデルデータを扱います
		
	Live2D_DeleteModel( Live2DModelHandle )
		Live2D のモデルを削除する
		
	---------------------------------------------------
	Live2D_Model_SetTranslate( Live2DModelHandle , x(float) , y(float) ) 
		Live2D のモデルの位置を設定する
		
	Live2D_Model_SetExtendRate( Live2DModelHandle , scale x(float) , scale y(float) )
		Live2D のモデルの拡大率を設定する
		
	Live2D_Model_SetRotate( Live2DModelHandle , rotate(float) )
		Live2D のモデルの回転を設定する
		
	Live2D_Model_Opacity( Live2DModelHandle , val( 0 ~ 255 ) )
		Live2Dモデルの透過値を設定します
		
	---------------------------------------------------
	Live2D_Model_StartMotion( Live2DModelHandle , group name , number )
		Live2D のモデルの指定のモーションを再生する
		
	Live2D_Model_SetExpression( Live2DModelHandle , expressionID )
		Live2D のモデルの指定の表情モーションを設定する
		
	---------------------------------------------------
	Live2D_Model_SetParameterValue( Live2DModelHandle , parameterId , val(float) )
		Live2D のモデルのパラメータを設定する
		
	---------------------------------------------------
	Live2D_Model_Update( Live2DModelHandle , time(float) )
		Live2D のモデルの状態を更新する
		
---------------------------------------------------
□Effekseer
	LoadEffekseerEffect( slot num , file name , scale(float) )
		エフェクトデータをファイルを読み込みます、その際スケール値も設定します
		
	DeleteEffekseerEffect( slot num )
		エフェクトデータを削除します
		
	PlayEffekseer3DEffect( slot num )
		エフェクトデータを再生します
		再生したエフェクトはgetPlayEffekseerHandleにより識別用のIDを取得します
		
	---------------------------------------------------
	StopEffekseer3DEffect( playingEffectHandle )
		再生中のエフェクトを停止します
		
	SetPosPlayingEffekseer3DEffect( playingEffectHandle , x(float) , y(float) , z(float) )
		エフェクトの位置を設定します
		
	SetRotationPlayingEffekseer3DEffect( playingEffectHandle , x(float) , y(float) , z(float) )
		エフェクトの姿勢を設定します
		
	SetScalePlayingEffekseer3DEffect( playingEffectHandle , x(float) , y(float) , z(float) )
		エフェクトの拡大率を設定します
		
	SetSpeedPlayingEffekseer3DEffect( playingEffectHandle , speed(float) )
		エフェクトの再生スピードを設定します
		
	SetColorPlayingEffekseer3DEffect( playingEffectHandle , r , g , b , a )
		エフェクトの色を設定します
		
	SetDynamicInput3DEffect( playingEffectHandle , index , val(float) )
		エフェクトの動的パラメーターを設定する
		
---------------------------------------------------
□DRAW	※任意で描画させる方式になって居ます
	ClearDrawScreen
		DxLib用の仮想画面をクリアします
		
	DrawMMD
		3D関係を描画します(Effekseer3D含む)
		
	DrawLive2D
		Live2D関係を描画します
		
	SetClearColor
		DxLib用の仮想画面のクリア色を指定します
		
	---------------------------------------------------
	DrawLine3D( Pos1 VECTOR , Pos2 VECTOR , col )
		3D空間に線を描画します
		
	DrawTriangle3D( Pos1 VECTOR , Pos2 VECTOR , Pos3 VECTOR , col , FillFlag )
		3D空間に三角形を描画します
		
	DrawSphere3D( CenterPos VECTOR , r(float) , DivNum , DifColor , SpcColor , FillFlag )
		3D空間に球を描画します
		分割数等、細かいパラメーターがありますので詳細はこちらを参照
		https://dxlib.xsrv.jp/function/dxfunc_3d_draw.html#R14N4
		
	DrawCapsule3D( Pos1 VECTOR , Pos2 VECTOR , r(float) , DivNum , DifColor , SpcColor , FillFlag )
		3D空間にカプセルを描画します
		
	DrawCone3D( TopPos VECTOR , BottomPos VECTOR , r(float) , DivNum , DifColor , SpcColor , FillFlag )
		3D空間にコーンを描画します
		
---------------------------------------------------
□FONT	※DxLibのフォント描画機能
	DrawString( x , y , String , Color , Edge Color )
		文字を描画します
		
	SetFont( font name , font size , font thickness , type( 0:none  1:Edge  2:Anti  3:A4X4  4:A8X8  5:AE  6:AE4X4  7:AE8X8 )
		フォントを設定します
		
		0	DX_FONTTYPE_NORMAL      : ノーマルフォント
		1	DX_FONTTYPE_EDGE        : エッジつきフォント
		2	DX_FONTTYPE_ANTIALIASING    : アンチエイリアスフォント
		3	DX_FONTTYPE_ANTIALIASING_4X4   : アンチエイリアスフォント( 4x4サンプリング )
		4	DX_FONTTYPE_ANTIALIASING_8X8   : アンチエイリアスフォント( 8x8サンプリング )
		5	DX_FONTTYPE_ANTIALIASING_EDGE   : アンチエイリアス&エッジ付きフォント
		6	DX_FONTTYPE_ANTIALIASING_EDGE_4X4 : アンチエイリアス&エッジ付きフォント( 4x4サンプリング )
		7	DX_FONTTYPE_ANTIALIASING_EDGE_8X8 : アンチエイリアス&エッジ付きフォント( 8x8サンプリング ) )
		
		※参考
		https://dxlib.xsrv.jp/function/dxfunc_graph2.html#R17N8
		https://dxlib.xsrv.jp/function/dxfunc_graph2.html#R17N24

---------------------------------------------------

================================================================================
■Expression

□MMD
	getLoadedMHandle_MMD
		ロードされたモデルのIDを取得する
		
	getAttachIndex_MMD
		アタッチされたIDを取得する
		
	---------------------------------------------------
	□Position & Animation
		MV1GetPosition( MHandle , 0x_1y_2z )
			モデルの座標情報を取得する
			
		MV1GetAttachAnimTime( MHandle , AttachIndex )
			アタッチされているアニメーションの再生時間を得る
			
		MV1GetAttachAnimTotalTime( MHandle , AttachIndex )
			アタッチされているアニメーションの終了時間を得る
			
	---------------------------------------------------
	□Frame
		MV1SearchFrame( MHandle , FrameName )
			フレーム名からフレームIDを得る
		
		MV1GetAttachAnimFrameLocalPosition( MHandle , AttachIndex , FrameIndex , 0x_1y_2z )
			フレームのローカル座標を取得する
			
	---------------------------------------------------
	□Collision
		getHitNum
			当たり判定のIDを取得する
		---------------------------------------------------
		getHitDim_HitPosition( Number , 0x_1y_2z )
			ヒット箇所の座標を取得する
			
		getHitDim_FrameIndex( Number )
			ヒット箇所のフレームIDを取得する
			
		getHitDim_MaterialIndex( Number )
			ヒット箇所のマテリアルIDを取得する
			
		getHitDim_Position( Number , triangle_0_2 , 0x_1y_2z )
			ヒットした三角形の頂点情報を得る
			
		getHitDim_Normal( Number , 0x_1y_2z )
			ヒットした三角形の法線情報を得る
			
	---------------------------------------------------
	□ShadowMap
		getMakeShadowMapHandle
			作成したシャドウマップのIDを得る
	---------------------------------------------------
	□CF-Screen
		CF_GetPositionAnimPosition( MHandle , AttachIndex , FrameIndex , 0x_1y )
			画面上での表示位置を取得する
			
---------------------------------------------------
□MATRIX,VECTOR
	getMatrixVal( Matrix_name , y , x )
		マトリクスの指定位置にある値を取得する
		
	getVectorVal( VECTOR_name , 0x_1y_2z )
		ベクトルの指定した値を取得する
		
---------------------------------------------------
□LIVE2D
	getLoadedLive2DModelHandle
		ロードしたモデルデータのIDを得る
	---------------------------------------------------
	Live2D_Model_IsMotionFinished( Live2DModelHandle )
		モデルデータがモーション再生の終了状態を得る
		
	Live2D_Model_GetParameterValue( Live2DModelHandle , ParamName )
		モデルデータのパラメーター値を得る
		
	Live2D_Model_HitTest( Live2DModelHandle , hitAreaName , fx , fy )
		モデルデータに設定されている当たり判定に当たっているかチェックする
	
---------------------------------------------------
□FONT
	getDrawStringWidth( String )
		文字の幅を得る
	
---------------------------------------------------
□Effekseer
	getPlayEffekseerHandle
		再生したエフェクトのIDを得る
		
	IsEffekseer3DEffectPlaying( playingEffectHandle )
		エフェクトの再生状態を得る


================================================================================
■コラム
3Dプログラミングに出てくるMatrix(マトリクス・行列とも言います)とは3D空間における位置、スケール、回転を表す情報の集合体です。
情報の実態は4*4のfloat情報であり、内部ではこの16個の小数点に行列計算を行う事で3Dにおける計算を楽に扱う事が出来るようになります。

実際に使うのはこのMatrixという概念の入れ物で
このMatrix同士を掛け算することによって、簡単に姿勢情報を合成することができるという恩恵が受けられます。

例えば、回転情報が入ったMatrixと位置情報が入ったMatrix同士を計算すると、それぞれの情報が合わさった回転&位置のMatrixが出来上がります。

注意点として、この計算は計算する順番が大事で
回転してから移動する結果と、移動してから回転する結果では、得られるMatrixは異なったものになります。
(移動してから回転はホットスポットの位置を変えてからの回転と同じ感じの動作イメージです)

================================================================================
■サンプルデータについて
サンプルデータに使っているモデル及び、モーションデータには著作権が存在します
利用規約については、それぞれのデータフォルダのテキストファイルに記述されています。

・Live2D サンプルモデル桃瀬ひより(PRO版)
・Appearance Miku ver 1.00
・【MMD】移動モーション v1.3

□BGMデータ
みきとP 『 いーあるふぁんくらぶ 』
https://www.youtube.com/watch?v=oBgADhsOoog

□Danceモーション
【MMDモーション配布】いーあるふぁんくらぶ【モーションキャプチャー】
https://www.nicovideo.jp/watch/sm40308776


================================================================================
■各種ライブラリのライセンスについて
libjpeg Copyright (C) 1991-2013, Thomas G. Lane, Guido Vollbeding.
libpng Copyright (C) 2004, 2006-2012 Glenn Randers-Pehrson.
zlib Copyright (C) 1995-2012 Jean-loup Gailly and Mark Adler.
libtiff Copyright (c) 1988-1997 Sam Leffler
libtiff Copyright (c) 1991-1997 Silicon Graphics, Inc.
Bullet Copyright (c) 2003-2006 Erwin Coumans.

================================================================================
■あとがき

色々な制作物(Extension)は役に立っているでしょうか?
使った作品でもありましたら、こっそりと教えて頂ければと思います。











DOWNLOAD(34.5MB)(add dll)
old ver(33.6MB)