最新版ライブラリでのMMDモデルの表示

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
シャルロット

最新版ライブラリでのMMDモデルの表示

#1

投稿記事 by シャルロット » 15年前

おわかりになる方、ご返答いただければ幸いです。
MikuMikuDance標準搭載モデルの初音ミクモデルをMV1LoadModel関数を使用して
読み込み、MV1DrawModelで描画する、それだけの事が行いたいのですが、
DxLibのバージョンを更新したところ以下の問題が発生いたしました。

Ver3.02bを使用していた時は問題なく描画されておりました。
しかし、最新版Ver3.04dに更新を行ったところキャラクターモデルが黒い帯状の何かを纏ってしまう様になってしまいました。
最新版を使用したい理由として、現在はUDPのシステムを利用したいと考えていますが、
今後もモデル不使用が原因でライブラリの更新が出来ないのは問題なので解決できればと考えております。
(過去の3D周りの不具合が大変改善されているようなので出来れば是非とも使いたいです。。)
よろしくお願いいたします。

開発環境:VisualStudio6.0
OS:WindowsVista
--------------------------------------------------------
以下ソースとなります
// WinMain
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
// ウインドウモードで起動
ChangeWindowMode( TRUE ) ;

// ライブラリの初期化
if( DxLib_Init() < 0 )
return -1 ;
//モデル読み込み
pl.ModelHandle = MV1LoadModel( "./dat/3d/miku.pmd" ) ;
MV1SetPosition( pl.ModelHandle, VGet( 320.0f, -300.0f, 1600.0f ) ) ;
MV1SetScale( pl.ModelHandle, VGet( 200.0f, 200.0f, 200.0f ) ) ;

// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;

// ESCキーが押されるか、ウインドウが閉じられるまでループ
while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 )
{
// 画面をクリア
ClearDrawScreen() ;

MV1DrawModel( pl.ModelHandle ) ;

// 裏画面の内容を表画面に反映
ScreenFlip() ;
}

// ライブラリの後始末
DxLib_End() ;

// ソフト終了
return 0 ;
}

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 最新版ライブラリでのMMDモデルの表示

#2

投稿記事 by softya(ソフト屋) » 15年前

これは、本家(開発者さん)の掲示板で尋ねられたほうが良くないですか?
「DXライブラリ質問掲示板」
http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: 最新版ライブラリでのMMDモデルの表示

#3

投稿記事 by h2so5 » 15年前

Ver3.03aから、PMDファイルを正しく表示するためにはトゥーングラデーションマップが必要になりました。
MMDに付属している toon01.bmp ~ toon10.bmp というテクスチャをモデルファイルと同じディレクトリに置く必要があります。

↓DXライブラリ更新履歴 Ver3.03a
    PMD を読み込んだ際はデフォルトでマテリアルのタイプをトゥーン
   レンダリングタイプ2にするように処理を変更。
   ( この変更に伴いトゥーン用のテクスチャも PMD ファイルと同じフォルダに
   格納しなければならないようになりました。詳しくは MV1LoadModel の解説
   をご参照下さい )
↓変更の経緯の過去ログ
http://hpcgi2.nifty.com/natupaji/bbs/pa ... o=1895&p=2

シャルロット

Re: 最新版ライブラリでのMMDモデルの表示

#4

投稿記事 by シャルロット » 15年前

ご返答いただきまして誠にありがとうございます。
>softya(ソフト屋)様
失礼いたしました、本家様に質問掲示板があったんですね。
「一人で悩まないで」というお言葉が印象的で、
質問はこちらのサイト様が受け口と勘違いしておりました。
>h2so5様
ご返答いただきまして、重ねてお礼申し上げます。
結果として、ご教授いただきました内容を元に、原因と対策がわかりましたので、
今後、似たような疑問にぶつかった人のために、過去検索用に記載させていただきます。
------------------------
h2so5様のおっしゃっていたtoon用画像ファイルを正しく設置する。
しかしながら、実行結果は変わらず、モデルの周囲に黒い帯が纏わりつく。

MV1SetScale関数が輪郭線も膨れ上がらせてしまったという情報を見つける。
モデルの呼出し後、拡大したモデルと輪郭の内、輪郭のみ元に戻す

コード:

	pl.ModelHandle = MV1LoadModel( "./dat/3d/miku.pmd" ) ;
	MV1SetPosition( pl.ModelHandle, VGet( 320.0f, -300.0f, 1600.0f ) ) ;

	MV1SetScale( pl.ModelHandle, VGet( 50.0f, 50.0f, 50.0f ) ) ;

	int MaterialNum = MV1GetMaterialNum( pl.ModelHandle ) ;  
	for( int i = 0 ; i < MaterialNum ; i ++ )  
	{  
		// マテリアルの輪郭線の太さを取得  
		float dotwidth = MV1GetMaterialOutLineDotWidth( pl.ModelHandle, i ) ;  
		// マテリアルの輪郭線の太さを拡大した分小さくする  
		MV1SetMaterialOutLineDotWidth( pl.ModelHandle, i, dotwidth/50.0f ) ;  
	}  	
非公開関数っていうんですか?
MV1GetMaterialOutLineDotWidthとMV1SetMaterialOutLineDotWidth
リファレンスページに乗ってない情報なので、
あくまで、上記のようにしたら私の求めていた結果になりましたという報告になります。

ご返答いただいたお二方、ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る