一回一回のご返信が遅くて申し訳ありません
恐らく 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 ;
}