トップページ > 記事閲覧
3Dモデルの複製
名前:りょう 日時: 2019/04/26 11:59

読み込んだ3Dモデルを、マテリアルとかテクスチャを無効にした状態で複製できないでしょうか。 理由としては、指定モデル全体を緑とか赤とかに色を変更したいのですが、元のモデルの特定フレームに色が付いていると、モデル全体を同一色に変更できないためです。 元の色情報は残しておきたいので、色の無い素の状態で複製できれば、目的を果たせそうと思い、質問させていただきました。 よろしくお願いいたします。
メンテ

Page: 1 |

Re: 3Dモデルの複製 ( No.1 )
名前:管理人 日時:2019/05/01 02:10

先にご返信されていた MORさんのお書き込みが消えてしまったので遅ればせながらご返信します 現在の機能ではマテリアルやテクスチャを無効にして複製する機能はありませんので、 お手数で申し訳ありませんが通常描画用のモデルとは別にマテリアルを無効にするモデルを別途 MV1LoadModel で 作成していただき、以下の『全てのマテリアルのテクスチャを真っ白テクスチャにして、且つ色設定も同じにする』という 方法を採ってください m(_ _)m // DxChara.x の全テクスチャを真っ白に、色設定も真っ白にしてアニメーションを再生するプログラム #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int ModelHandle, AttachIndex ; float TotalTime, PlayTime ; int WhiteTexture ; // ウィンドウモードで起動 ChangeWindowMode( TRUE ) ; // 背景を灰色に設定 SetBackgroundColor( 128,128,128 ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) { // エラーが発生したら直ちに終了 return -1 ; } // 真っ白のテクスチャを作成する WhiteTexture = MakeScreen( 16, 16, FALSE ) ; SetDrawScreen( WhiteTexture ) ; DrawBox( 0, 0, 16, 16, GetColor( 255,255,255 ), TRUE ) ; // 3Dモデルの読み込み ModelHandle = MV1LoadModel( "DxChara.x" ) ; // 全てのマテリアルを一定の色+真っ白テクスチャにする { // テクスチャ 0番を真っ白テクスチャにする MV1SetTextureGraphHandle( ModelHandle, 0, WhiteTexture, FALSE ) ; // マテリアルの数を取得 int MaterialNum = MV1GetMaterialNum( ModelHandle ) ; // マテリアルの数だけ繰り返し for( int i = 0 ; i < MaterialNum ; i ++ ) { // マテリアルタイプを標準タイプにする MV1SetMaterialType( ModelHandle, i, DX_MATERIAL_TYPE_NORMAL ) ; // ブレンドモードをブレンドなしに設定 MV1SetMaterialDrawBlendMode( ModelHandle, i, DX_BLENDMODE_NOBLEND ) ; MV1SetMaterialDrawBlendParam( ModelHandle, i, 255 ) ; // マテリアルの色情報をすべて同じにする MV1SetMaterialDifColor( ModelHandle, i, GetColorF( 1.0f, 1.0f, 1.0f, 1.0f ) ) ; MV1SetMaterialSpcColor( ModelHandle, i, GetColorF( 0.0f, 0.0f, 0.0f, 0.0f ) ) ; MV1SetMaterialEmiColor( ModelHandle, i, GetColorF( 0.0f, 0.0f, 0.0f, 0.0f ) ) ; MV1SetMaterialAmbColor( ModelHandle, i, GetColorF( 0.2f, 0.2f, 0.2f, 0.2f ) ) ; // テクスチャは真っ白テクスチャである 0番に設定 MV1SetMaterialDifMapTexture( ModelHandle, i, 0 ) ; } } // 画面に映る位置に3Dモデルを移動 MV1SetPosition( ModelHandle, VGet( 320.0f, -300.0f, 600.0f ) ) ; // 3Dモデルの0番目のアニメーションをアタッチする AttachIndex = MV1AttachAnim( ModelHandle, 0, -1, FALSE ) ; // アタッチしたアニメーションの総再生時間を取得する TotalTime = MV1GetAttachAnimTotalTime( ModelHandle, AttachIndex ) ; // 描画先を裏画面に変更 SetDrawScreen( DX_SCREEN_BACK ) ; // 再生時間の初期化 PlayTime = 0.0f ; // 何かキーが押されるかウインドウが閉じられるまでループ while( ProcessMessage() == 0 && CheckHitKeyAll() == 0 ) { // 画面をクリア ClearDrawScreen() ; // 再生時間を進める PlayTime += 100.0f ; // 再生時間がアニメーションの総再生時間に達したら再生時間を0に戻す if( PlayTime >= TotalTime ) { PlayTime = 0.0f ; } // 再生時間をセットする MV1SetAttachAnimTime( ModelHandle, AttachIndex, PlayTime ) ; // 3Dモデルの描画 MV1DrawModel( ModelHandle ) ; // 裏画面の内容を表画面に反映 ScreenFlip() ; } // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; }
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存