5年後起業することを夢見る、初心者ゲームプログラマーの神楽坂 冬月による同人と気ままな日記ブログです。

スポンサーサイト

--.--.--
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

今年は4月ネタは行いません

2012.04.01
冬月 エイプリルフールネタは誰も期待してないでしょうねぇ
まあ、今のブログ、3月31日に更新予定だった内容なんで
ネタも考えてないです。ハイ。

というかね
今作ってるゲームがAXLさん全面協力
というのを、去年やったらほんとうに信じてくれた人がいて……
冬華

ただ、今日の午前中までには有効らしいので
ネタが浮かべば
やると思います。
設子

冬月 ということで、平常通りの
ゲーム製作過程度をお伝えします
つまらないとか言わない。



冬月 坊主になって後方に髪の毛が取り残されてます。
どうぶつの森、マインクラフトみたいなキャラの方向へ首を曲げる処理を試している段階です。




こんな感じね。
体位はそのままで顔だけこっち向けてるの
ボーンの仕組みさえわかってしまえばすぐにできることなんだけど、意外と躓くんだよね。
冬華


	//--------------------------------------------------------------------------------
	//スキンメッシュの場合
	if(pMeshContainer->pSkinInfo != NULL) {
		// ボーン合成バッファのポインタを取得する。
		LPD3DXBONECOMBINATION pBoneCombination =
			(LPD3DXBONECOMBINATION)pMeshContainer->pBoneBuffer->GetBufferPointer();

		//--------------------------------------------------------------------------------
		// 見つからないときのためにUINT_MAXにしておく。
		DWORD dwPrevBoneID = UINT_MAX;
		for (DWORD i = 0; i < pMeshContainer->dwNumBones; i++) {
			
			//--------------------------------------------------------------------------------
			// 合成する行列の数を調べる。
			DWORD dwNumBlendMatrices = 0;
			for (DWORD j = 0; j < pMeshContainer->dwWeight; j++) {
				if (pBoneCombination[i].BoneId[j] != UINT_MAX) {
					dwNumBlendMatrices = j;
				}
			}

			//--------------------------------------------------------------------------------
			// 頂点ブレンドのレンダリングステートを設定する。
			m_d3dDevice->SetRenderState(D3DRS_VERTEXBLEND, dwNumBlendMatrices);
			for (DWORD j = 0; j < pMeshContainer->dwWeight; j++) {
				UINT iMatrixIndex = pBoneCombination[i].BoneId[j];
				if (iMatrixIndex != UINT_MAX) {
					
					//--------------------------------------------------------------------------------
					// 行列スタックにボーン用の変換行列を設定する。
					D3DXMATRIX matStack = pMeshContainer->pBoneOffsetMatrices[iMatrixIndex] * (*pMeshContainer->ppBoneMatrix[iMatrixIndex]);
					
					//--------------------------------------------------------------------------------
					//合成
					if(m_IsSetBorn == true){
						for(int nn = 0; nn < 10; nn++){
							if(strcmp(m_SetBorn_Name[nn], pMeshContainer->Name) == 0){
								matStack = ChangeRotToMatrix(m_SetBornRot[nn]) * pMeshContainer->pBoneOffsetMatrices[iMatrixIndex] * (*pMeshContainer->ppBoneMatrix[iMatrixIndex]);
								break;
							}
						}
					}

					//--------------------------------------------------------------------------------
					// ボーンの変換行列を設定する。
					m_d3dDevice->SetTransform(D3DTS_WORLDMATRIX(j), &matStack);
				}
			}

少しでもページを稼ぐためにソースを投下しました。
変数名ぐちゃぐちゃなのは学生の頃から継ぎ足し使っているからだそうですが
ラーメン屋のタレですか……
設子

冬月 ぐぬぬ、まじめに解説すると、
上のソースは、展開したアニメーションメッシュのボーンを実際に適応する部分になります
……まあ、サンプルソースのままなので見比べてもらうとわかりやすいかもしれません


					//--------------------------------------------------------------------------------
					//合成
					if(m_IsSetBorn == true){
						for(int nn = 0; nn < 10; nn++){
							if(strcmp(m_SetBorn_Name[nn], pMeshContainer->Name) == 0){
								matStack = ChangeRotToMatrix(m_SetBornRot[nn]) * pMeshContainer->pBoneOffsetMatrices[iMatrixIndex] * (*pMeshContainer->ppBoneMatrix[iMatrixIndex]);
								break;
							}
						}
					}

で、今回追加したのはたったこんなけになります。
【(m_IsSetBorn】で自前でボーン操作しているかどうかを判断し

冬華


【strcmp(m_SetBorn_Name[nn], pMeshContainer->Name)】で動かすボーンのジョイント名を見つけて

設子

冬月
【matStack = ChangeRotToMatrix(m_SetBornRot[nn]) * pMeshContainer->pBoneOffsetMatrices[iMatrixIndex] * (*pMeshContainer->ppBoneMatrix[iMatrixIndex]);】で適応させる角度(行列)で追加しました
文字列でボーンの場所を見つける、CPUには優しくない設計です。



そして、適当なボーンを動かしたのがこちらになります
首がグキッってます。

冬華

本来なら、元を動かせば、その先につながるボーンも変化させるのが道理なんでしょうが
それをやると結構なソースになってしまうので今回は、適応させる分のボーンを自前で動かすように設定しています

設子



冬月 で、こちらが調整したもの
適当な値を突っ込んでいるのでとりあえず【首がグキッってます】
痛そう。

で、実は、被写界深度というエフェクトも入れたんですが、どうも綺麗に適応されないため今は使ってません。
被写界深度っていうのは、ピントの合っていない部分をぼかすエフェクトです

冬華

冬月さんの表現したいものがほとんど実現できるようになって来ました。
あとは、物理演算を使ったスカート(ボーン)のアニメーションを実装することでしょうか。
今のソースを流用すればできそうな気がしますが、どうやって表現しましょうか……
設子

関連記事

テーマ : ゲーム製作 関連

ジャンル : ゲーム

コメント
コメントの投稿


管理者にだけ表示を許可する

FC2カウンター
プロフィール

神楽坂 冬月(かぐらざか ふゆつき)

Author:神楽坂 冬月(かぐらざか ふゆつき)
【イベント情報】

2015年08月14日(1日目)
コミックマーケット88に参加します!
【金曜日 東地区 "ソ" ブロック 43a】
です!
東方紅魔烏【ウォーシミュレーション】
妖夢龍剣伝(体験版)【アクション】
の2点を出店予定です
よろしくお願い致します!

-----------------------------------------
2014年12月29日
コミックマーケット87に参加します!
【月曜日 東地区 "ハ" ブロック 50a】
参加してくださった型、ありがとうございます&
お疲れ様でした!

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

めざせ!業界有名人!ということで新米ゲームプログラマーとして活動しています。
次の段階へ移行!
5年後起業という目標に目指してがんばりますぞ!

バナー2
http://studio-cross.com/
HPも作ってますので、どうぞよろしくお願いします

pixiv
月別アーカイブ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。