おわかりになる方、ご返答いただければ幸いです。
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 ;
}
最新版ライブラリでのMMDモデルの表示
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 最新版ライブラリでのMMDモデルの表示
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 最新版ライブラリでのMMDモデルの表示
Ver3.03aから、PMDファイルを正しく表示するためにはトゥーングラデーションマップが必要になりました。
MMDに付属している toon01.bmp ~ toon10.bmp というテクスチャをモデルファイルと同じディレクトリに置く必要があります。
↓DXライブラリ更新履歴 Ver3.03a
http://hpcgi2.nifty.com/natupaji/bbs/pa ... o=1895&p=2
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モデルの表示
ご返答いただきまして誠にありがとうございます。
>softya(ソフト屋)様
失礼いたしました、本家様に質問掲示板があったんですね。
「一人で悩まないで」というお言葉が印象的で、
質問はこちらのサイト様が受け口と勘違いしておりました。
>h2so5様
ご返答いただきまして、重ねてお礼申し上げます。
結果として、ご教授いただきました内容を元に、原因と対策がわかりましたので、
今後、似たような疑問にぶつかった人のために、過去検索用に記載させていただきます。
------------------------
h2so5様のおっしゃっていたtoon用画像ファイルを正しく設置する。
しかしながら、実行結果は変わらず、モデルの周囲に黒い帯が纏わりつく。
↓
MV1SetScale関数が輪郭線も膨れ上がらせてしまったという情報を見つける。
モデルの呼出し後、拡大したモデルと輪郭の内、輪郭のみ元に戻す
非公開関数っていうんですか?
MV1GetMaterialOutLineDotWidthとMV1SetMaterialOutLineDotWidth
リファレンスページに乗ってない情報なので、
あくまで、上記のようにしたら私の求めていた結果になりましたという報告になります。
ご返答いただいたお二方、ありがとうございました。
>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
リファレンスページに乗ってない情報なので、
あくまで、上記のようにしたら私の求めていた結果になりましたという報告になります。
ご返答いただいたお二方、ありがとうございました。