トップページ > 過去ログ > 記事閲覧
3Dモデル描画結果の反転
名前:eel 日時: 2010/09/26 04:37

タイトル通りになります。 DrawModelやDrawFrameを用いてモデルを描画する時に、それをDrawGraphのように左右反転させて描画したいです。 アドバイスをよろしくお願いいたします。

Page: 1 |

Re: 3Dモデル描画結果の反転 ( No.1 )
名前:管理人 日時:2010/10/04 05:24

モデルの描画を単純に左右反転する方法は、あるといえばありますが、 されたいことによっては適用できないかもしれません どのような用途で描画結果を反転されようとお考えなのでしょうか?
Re: 3Dモデル描画結果の反転 ( No.2 )
名前:eel 日時:2010/10/04 18:56

ご回答ありがとうございます。 3Dモデル(アニメーションを含む)を単純に真横から見て、→向きに描画されている場合に、その結果を反転させて←向きにしたいだけです。 3D空間に常に一方向からしか見えないことが前提の看板を置いて、鏡映しにしたように反転した看板もその隣に置いてみる、といった感じです。 言葉で説明するのは難しいのですが、伝わりましたでしょうか?
Re: 3Dモデル描画結果の反転 ( No.3 )
名前:管理人 日時:2010/10/08 08:40

向きを真逆( 180度回転 )にして描画するではなく、必ず鏡映しにしなければ ならないのでしょうか?( 文字が描かれていたら反転するような )
Re: 3Dモデル描画結果の反転 ( No.4 )
名前:eel 日時:2010/10/08 13:55

その通りです。描画結果を2D的に扱って、それを反転させるようなイメージです。 180度回転だと、看板の裏面が見えてしまうと思うので・・・
Re: 3Dモデル描画結果の反転 ( No.5 )
名前:管理人 日時:2010/10/16 14:46

一回一回のご返信が遅くて申し訳ありません 恐らく eelさんのご要望にお応えできる機能を追加できたと思いますので、 よろしければこちらのバージョンをダウンロードしてください m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい) 最初は描画結果を反転することを考えていたのですが、それよりもモデルに対して マイナススケーリングを掛けて反転した方が楽だし負荷も低いということに気づいたので そちらの方法をご紹介することにしました 具体的には MV1SetScale で -1.0f のスケーリングを設定した状態で描画します ただ、それだけではポリゴンが反転してしまって背面カリング( 後ろ向きのポリゴンの 描画をキャンセルして描画負荷を下げる機能 )の処理で描画結果がおかしくなってしまうので、 MV1SetMeshBackCulling で背面カリングの向きを逆にする必要があります( この、背面カリングの 向きを逆にする機能が今回追加した機能です ) 通常の描画をした後、キー入力を待ってZ軸方向に反転したモデルを描画する サンプルプログラムを組んでみましたので、よろしければご覧になってみてください m(_ _)m #include "DxLib.h" #define PI 3.1415926535897932384626433832795f // WinMain 関数 int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int ModelHandle ; int i, MeshNum ; // ウインドウモードで起動 ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1 ; // 3Dモデルの読み込み ModelHandle = MV1LoadModel( "DxChara.x" ) ; // 画面に映る位置に3Dモデルを移動 MV1SetPosition( ModelHandle, VGet( 320.0f, -300.0f, 600.0f ) ) ; // モデルを90度回転させて横を向かせる MV1SetRotationXYZ( ModelHandle, VGet( 0.0f, PI / 2.0f, 0.0f ) ) ; // モデルを描画 MV1DrawModel( ModelHandle ) ; // メッセージ描画 DrawString( 0, 0, "通常描画 何かキーを押してください", GetColor( 255,255,255 ) ) ; // キー入力待ち WaitKey() ; // 画面のクリア ClearDrawScreen() ; // ここから反転描画の処理です // モデル中のバックカリングを行うメッシュを、左回りバックカリングから右回りバックカリングに変更する MeshNum = MV1GetMeshNum( ModelHandle ) ; for( i = 0 ; i < MeshNum ; i ++ ) { // 背面カリングを元々行わない設定のメッシュは設定を変更しない if( MV1GetMeshBackCulling( ModelHandle, i ) != DX_CULLING_NONE ) { // 背面カリングの設定をデフォルトの DX_CULLING_LEFT とは逆の DX_CULLING_RIGHT を設定 MV1SetMeshBackCulling( ModelHandle, i, DX_CULLING_RIGHT ) ; } } // Z軸方向にマイナススケーリング MV1SetScale( ModelHandle, VGet( 1.0f, 1.0f, -1.0f ) ) ; // モデルを描画 MV1DrawModel( ModelHandle ) ; // メッセージ描画 DrawString( 0, 0, "反転描画 何かキーを押すと終了します", GetColor( 255,255,255 ) ) ; // キー入力待ち WaitKey() ; // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; }
Re: 3Dモデル描画結果の反転 ( No.6 )
名前:eel 日時:2010/10/17 18:26

ありがとうございます、思ったとおりの表示ができました。 お忙しいところ対応していただき感謝ですm(_ _)m

Page: 1 |