トップページ > 過去ログ > 記事閲覧
SetupCamera_Ortho()について
名前:OX 日時: 2012/11/08 12:31

早速ですが、 SetupCamera_Ortho(2000.0f)をつかって、 三つのトライアングルを描画してみたら、 なぜか三つも並んでいるように見えちゃいます。 この関数はVGetのZ値が大きいほど画面の上(または下)に描画するようではなく、 どんなZ値でも同じY値で描画しますか? これはバグか、仕様かどうかわからないので投稿してみました。 検証用コードと画像を用意しました、どうかご覧ください。 結果:ttps://dl.dropbox.com/u/53745038/dxlib_question.png int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { // DXライブラリの初期化 if( DxLib_Init() < 0 ) { // エラーが発生したら直ちに終了 return -1 ; } // カメラを正射影に変更 SetupCamera_Ortho( 2000.0f ) ; // カメラの前方に奥行き座標の違うモデルを3個描画 DrawTriangle3D( VGet(0.0f,100.0f, 0.0f), VGet(400.0f,400.0f, 0.0f), VGet(500.0f,100.0f, 0.0f), GetColor( 255,255,255 ), FALSE ) ; DrawTriangle3D( VGet(300.0f,100.0f, 500.0f), VGet(700.0f,400.0f, 500.0f), VGet(800.0f,100.0f, 500.0f), GetColor( 255,255,255 ), FALSE ) ; DrawTriangle3D( VGet(600.0f,100.0f, 1000.0f), VGet(1000.0f,400.0f, 1000.0f), VGet(1100.0f,100.0f, 1000.0f), GetColor( 255,255,255 ), FALSE ) ; // キー入力待ち WaitKey() ; // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; }

Page: 1 |

Re: SetupCamera_Ortho()について ( No.1 )
名前:管理人 日時:2012/11/10 16:27

仕様です SetupCamera_Ortho は正射影カメラなので、Z値が変化しても描画されるスクリーンのY座標は変化しません Z値が変化すると描画されるスクリーンのY座標が変化するのは SetupCamera_Perspective の方になります
Re: SetupCamera_Ortho()について ( No.2 )
名前:OX 日時:2012/11/10 20:43

同じスレですみません つまり、SetupCameraOrtho()は下のイメージのように等角で描画することができないんですね en.wikipedia.org/wiki/File:3D_shapes_in_isometric_projection.svg もしそうしたいのなら、他になにかいい方法がありますか? 実は2Dゲームに固定な上向きのZ軸を増やして、偽3D空間にしたいんです DrawGraphなどの関数をつかったら、どの画像がもっと奥にあるのか判断できなくて 前にあるはずな画像が奥に描画してしまうんです SetupCameraOrthoを使って、カメラを空中に設置すると等角みたいに描画できるけど、 本当の等角じゃないので困っています アドバイスよろしくお願いします
Re: SetupCamera_Ortho()について ( No.3 )
名前:管理人 日時:2012/11/10 22:15

できます なるほど、OXさんがされたいことが分かりました カメラを上から下に見下ろすようにすればご希望の表現は SetupCamera_Ortho で可能です int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { // DXライブラリの初期化 if( DxLib_Init() < 0 ) { // エラーが発生したら直ちに終了 return -1 ; } // カメラを正射影に変更 SetupCamera_Ortho( 2000.0f ) ; // **************** ここで上から下を見下ろすカメラにしています ******************* SetCameraPositionAndTarget_UpVecY( VGet( 320.0f, 400.0f, -415.0f ), VGet( 320.0f, 240.0f, 0.0f ) ) ; // カメラの前方に奥行き座標の違うモデルを3個描画 DrawTriangle3D( VGet(0.0f,100.0f, 0.0f), VGet(400.0f,400.0f, 0.0f), VGet(500.0f,100.0f, 0.0f), GetColor( 255,255,255 ), FALSE ) ; DrawTriangle3D( VGet(300.0f,100.0f, 500.0f), VGet(700.0f,400.0f, 500.0f), VGet(800.0f,100.0f, 500.0f), GetColor( 255,255,255 ), FALSE ) ; DrawTriangle3D( VGet(600.0f,100.0f, 1000.0f), VGet(1000.0f,400.0f, 1000.0f), VGet(1100.0f,100.0f, 1000.0f), GetColor( 255,255,255 ), FALSE ) ; // キー入力待ち WaitKey() ; // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; } ご希望の見え方になるように SetCameraPositionAndTarget_UpVecY の引数を調整してみてください
Re: SetupCamera_Ortho()について ( No.4 )
名前:OX 日時:2012/11/10 23:15

快速な返事いつもありがとう すみません、はっきり言ってませんでした カメラを上に設置するのはすでに試しました たしかにカメラを上にすると三角が並びませんが 三角のY軸の距離がVGet()で書いた通りに500 pixelsではありません カメラの位置と注視点を調整して、地面との角度を45にしても500よりずっと少ないです その距離をちょうど500にする方法はありますか?
Re: SetupCamera_Ortho()について ( No.5 )
名前:管理人 日時:2012/11/11 01:21

なるほどX/Y/Z軸の値がそのままpixelに対応する必要があるのですね となると、こちらのようにすればほぼpixelと対応します SetupCamera_Ortho( 480.0f * 0.70710678118654752440084436210485f ) ; SetCameraDotAspect( 0.70710678118654752440084436210485f ) ; SetCameraPositionAndTarget_UpVecY( VGet( 0.0f, 400.0f, -400.0f ), VGet( 0.0f, 0.0f, 0.0f ) ) ; ( 因みに 0.70710678118654752440084436210485f は sin の角度45です ) ただ、本当に厳密に pixel と対応されたいのでしたら、3Dを使わずに2Dを使い、 描画順番は自分で管理するのが良いと思います

Page: 1 |