トップページ > 記事閲覧
モデルが原点に向かって変形してしまう
名前:煮浸し 日時: 2017/05/22 21:30

初めまして、煮浸しと申します MagicaVoxel(https://voxel.codeplex.com/)にてobj形式のモデルを作り blenderにてボーンの設定を行いfbxに出力したものをDxLibModelViewerにてmv1に変換し描画した際 モデルの描画位置が原点から離れると原点に向かってモデルの一部頂点が変形してしまいました。 試しに、ボーンの入っていない状態でfbxに書き出しmv1に変換した際は、問題なく描画されました。 ボーンの設定を見直してみたのですが、当方初めての3Dゲーム制作でなかなか原因にたどり着けず 誠に勝手ながら、お力添えを頂きたく質問させていただきました。 宜しくお願いいたします。 下記リンクにSS、モデルをアップロードしましたのでお手数ですがご確認いただけると幸いです。 goo.gl/WGOjlF
メンテ

Page: 1 |

Re: モデルが原点に向かって変形してしまう ( No.1 )
名前:管理人 日時:2017/05/22 23:56

アップしていただいたモデルを使って以下のような「キーボードの上下左右キーでモデルを移動する」 テストプログラムを組んでみたのですが、原点に向かってモデルの一部が変形するということはありませんでした #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int ModelHandle ; VECTOR Position ; // ウインドウモードで起動 ChangeWindowMode( TRUE ); // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1; // モデル読み込み ModelHandle = MV1LoadModel( "re_Amelia.mv1" ) ; // 描画先を裏画面へ変更 SetDrawScreen( DX_SCREEN_BACK ) ; // カメラの位置と向きを設定 SetCameraPositionAndTarget_UpVecY( VGet( 0.0f, 600.0f, -1000.0f ), VGet( 0.0f, 180.0f, 0.0f ) ); // カメラのクリップ距離を設定 SetCameraNearFar( 10.0f, 1750.0f ); // 座標を初期化 Position = VGet( 0.0f, 0.0f, 0.0f ) ; // メインループ while( ProcessMessage() == 0 ) { // 画面クリア ClearDrawScreen() ; // 背景を緑色にする DrawBox( 0, 0, 640, 480, GetColor( 0,128,0 ), TRUE ) ; // 上下左右キーで3DモデルのXY座標変更 if( CheckHitKey( KEY_INPUT_LEFT ) ) Position.x -= 8.0f ; if( CheckHitKey( KEY_INPUT_RIGHT ) ) Position.x += 8.0f ; if( CheckHitKey( KEY_INPUT_DOWN ) ) Position.y -= 8.0f ; if( CheckHitKey( KEY_INPUT_UP ) ) Position.y += 8.0f ; MV1SetPosition( ModelHandle, Position ) ; // 3Dモデルを描画 MV1DrawModel( ModelHandle ) ; // 3Dモデルの座標を表示 DrawFormatString( 0, 0, GetColor( 255,255,255 ), "Position:%.1f, %.1f, %.1f", Position.x, Position.y, Position.z ) ; // 裏画面の内容を表画面に反映する ScreenFlip() ; } // DXライブラリの後始末 DxLib_End(); // ソフトの終了 return 0; } よろしければ煮浸しさんの環境でも上記のプログラムが正常に動作するか試してみていただけないでしょうか? m(_ _)m
メンテ
Re: モデルが原点に向かって変形してしまう ( No.2 )
名前:煮浸し 日時:2017/05/23 01:48

迅速なご対応有難うございます。 カメラの視野内だとあまり変化はありませんでしたが 頂いたサンプルに一行だけ SetCameraPositionAndTarget_UpVecY(VAdd(VGet(0.0f, 600.0f, -1000.0f), Position), VAdd(VGet(0.0f, 180.0f, 0.0f), Position)); を追加してカメラとモデルを付随させて動かしてみると 大体座標が+-1000当たりから徐々に変形してしまいました…。 一応大雑把ですが環境を記載しておきます プロセッサ:Core i7 6700 メモリ:32GB ビデオカード:GTX 1080(VRAM 8GB)
メンテ
Re: モデルが原点に向かって変形してしまう ( No.3 )
名前:管理人 日時:2017/05/24 00:10

私の環境でも載せていただいた1行を追加したところ変形することを確認しました すみません、3Dモデルが大きな値の座標に弱いことを失念していました Direct3D が主に使用している float型は仕様と精度の関係で大きな数値に弱く、 座標の値が大きくなると小さな値の差であるモデルを構成する各頂点の座標に誤差が発生してしまうという現象があります なので、fbx に出力する前にモデルを今の10分の1や100分の1のサイズに縮小させて、 小さくなったモデルを使用すれば本件のような現象は発生しなくなると思います ( モデルが小さくなれば動き回る座標値の範囲も狭くなるため ) それ以外に手軽に対応する方法としては、DxLib_Init の呼び出し前に SetUseLarge3DPositionSupport( TRUE ) ; という記述を追加するという方法があります こちらは CPU の負荷が若干増しますが、前述のような3Dモデル側の変更は行わずに 変形現象を抑えることができます CPU 性能に余裕がありましたら、SetUseLarge3DPositionSupport( TRUE ) ; をお使いください m(_ _)m
メンテ
Re: モデルが原点に向かって変形してしまう ( No.4 )
名前:煮浸し(解決) 日時:2017/05/24 00:27

問題なく表示することができました! なるほど…なるべく小さなサイズでモデルを作成したほうが良いのですね。 具体的な原因までご教示くださり有難うございました。
メンテ

Page: 1 |

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

   クッキー保存