トップページ > 過去ログ > 記事閲覧
SetDraw3DScaleとConvWorldPosToS
名前:computermania 日時: 2010/12/05 05:30

ConvWorldPosToScreenPosにSetDraw3DScaleが反映されていないような気がします。 ご確認いただけると嬉しいです。 まだソースレベルでは確認していないので、時間が開きましたらdxlibのソースの方も見てみます。

Page: 1 |

Re: SetDraw3DScaleとConvWorldPosToS ( No.1 )
名前:管理人 日時:2010/12/05 20:29

ご報告ありがとうございます 簡単なテストを行ってみたのですが、設定は反映されているようでした 私がテストに使用したプログラムをこちらに載せますので、よろしければ computermaniaさんの環境でも正常に動作するかご確認になってみていただけないでしょうか? 3Dの描画スケールを2倍にした状態で、奥行き方向に回転する DxChar.x の左手 の3D座標を ConvWorldPosToScreenPos でスクリーン座標に変換して、その座標に 緑色の16x16サイズのボックスを描画するというものです #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int ModelHandle ; int rotX, rotY, rotZ ; VECTOR WorldPos, ScreenPos ; ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) { // エラーが発生したら直ちに終了 return -1 ; } // 3Dモデルの読み込み ModelHandle = MV1LoadModel( "DxChara.x" ) ; // 描画先を裏画面にする SetDrawScreen( DX_SCREEN_BACK ) ; // 描画スケールを2倍にする SetDraw3DScale( 2.0f ) ; rotZ = 0 ; while( ProcessMessage() == 0 ) { ClearDrawScreen() ; rotZ ++ ; if( rotZ >= 360 ) rotZ = 0 ; // 画面に映る位置に3Dモデルを移動 MV1SetPosition( ModelHandle, VGet( 320.0f, 0.0f, 600.0f ) ) ; // 3DモデルのZ軸を画面左上方向に向ける MV1SetRotationZYAxis( ModelHandle, VGet( -0.5f, 0.5f, 0.0f ), VGet( 0.5f, 0.5f, 0.0f ), rotZ / 180.0f * 3.1415926535897932384626433832795f ) ; // 3Dモデルを描画 MV1DrawModel( ModelHandle ) ; // 左手のワールド座標をスクリーン座標に変換する WorldPos = MV1GetFramePosition( ModelHandle, MV1SearchFrame( ModelHandle, "WristL" ) ) ; ScreenPos = ConvWorldPosToScreenPos( WorldPos ); // 取得したスクリーン座標にボックスを描画する DrawBox( ScreenPos.x - 8, ScreenPos.y - 8, ScreenPos.x + 8, ScreenPos.y + 8, GetColor( 0,255,0 ), TRUE ) ; ScreenFlip() ; } // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; }

Page: 1 |