トップページ > 過去ログ > 記事閲覧
ConvScreenPosToWorldPos の仕様につい
名前:CYARACON 日時: 2012/09/23 05:58

関数 ConvScreenPosToWorldPos の仕様について確認させてください。 与える座標の「Z座標」については、解説では「指定できる値の範囲は 0.0f から 1.0f です。」 との記述があります。 この記述から察するに、0.0f〜1.0f の間の「中間値」を指定すると、カメラの視野範囲に比例したZ座標が当てはまるように思えたのですが、 実際に試して見ると、中間値はすべて 0.0f を指定したのと動作が変わらないように思えます。 この関数の仕様としては、0.0f か 1.0f の二択( 1.0f 未満はすべて 0.0f とみなされる)という仕様になるのでしょうか?

Page: 1 |

Re: ConvScreenPosToWorldPos の仕様につい ( No.1 )
名前:管理人 日時:2012/09/23 18:13

いえ、違います お察しの通り中間値に比例したZ座標が当てはまります ただ、その結果は線形的なものではありません 例えば以下のようなプログラムを実行していただければ分かると思います Zの値を 0.0f から 1.0f まで 20段階に分けて ConvScreenPosToWorldPos に渡した結果を画面に表示するというプログラムです #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { VECTOR Pos ; int i ; // ウインドウモードで起動 ChangeWindowMode( TRUE ); // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1; SetDrawScreen( DX_SCREEN_BACK ) ; for( i = 0 ; i <= 20 ; i ++ ) { Pos = ConvScreenPosToWorldPos( VGet( 10.0f, 10.0f, ( float )i / 20.0f ) ) ; DrawFormatString( 0, i * 16, GetColor( 255,255,255 ), "SrcZ:%f x=%.3f y=%.3f z=%f", ( float )i / 20.0f, Pos.x, Pos.y, Pos.z ) ; } ScreenFlip() ; WaitKey() ; // DXライブラリの後始末 DxLib_End(); // ソフトの終了 return 0; } 線形的な結果を得ることができる関数として ConvScreenPosToWorldPos_ZLinear というのがありますので、もしご必要でしたらお使いください ( 引数、戻り値ともに ConvScreenPosToWorldPos と同じです )
Re: ConvScreenPosToWorldPos の仕様につい ( No.2 )
名前:CYARACON(解決済み) 日時:2012/09/23 21:07

>管理人様 サンプルまで用意いていただき、ありがとうございます。 なるほど、線形では無かったのですね。 再度ためしてみます。ありがとうございました。

Page: 1 |