【DXライブラリ】DrawGraphFで座標を小数で指定する場合の注意点

DrawGraphF関数を使う前に

DrawGraphF関数の基本的なこと

DrawGraphFは非公開関数。

DrawGraphの座標を小数で指定できるようになったもの。

ただし描画モード(画像補間方法)を適切に設定しないと想定している動作にならない。

描画モードはSetDrawModeで指定する。

必要に応じて再びSetDrawModeで設定を戻すこと。

DrawGraphF関数の宣言

int	DrawGraphF(float xf, float yf, int GrHandle, int TransFlag);

DrawGraph関数と同じようなもの。

xfとyfは小数で指定する。

GrHandleは描画するグラフィックのハンドルでDrawGraphの場合と同じ。

TransFlagはTRUEで画像の透明度設定を有効に、FALSEで無効にする。

通常はTRUEで問題ないだろう。

SetDrawMode関数

DXライブラリではSetDrawMode関数を使うことで画像の補間方法を指定できる。

DrawGraphF関数で小数の座標を指定する場合は補間方法によって意図しない表示になってしまうので注意する。

描画モードは以下の二通り。

  • ニアレストネイバー(nearest neighbor)
  • バイリニア(Bilinear)

ニアレストネイバーが初期状態で指定されている。

実際に描画モードを指定する場合は次のように使用する。

SetDrawMode(DX_DRAWMODE_NEAREST); // ニアレストネイバーによる補間
SetDrawMode(DX_DRAWMODE_BILINEAR); // バイリニアによる補間

何も指定していない状態、つまり初期状態ではニアレストネイバーになっている。

描画モード(画像補間方法)による違いは実例を交えて後述する。

DrawGraphF関数の使用と描画モードによる違い

画像の説明

DrawGraphFを使用した際、描画モードによってどう違いがあるのかサンプル画像を用意してみた。

元になったドット絵のサイズが小さいので画像編集ソフトで8倍に拡大している。

4体表示されているが、左から順番に次のように変化を加えている。

  1. DrawGraphで整数の座標を指定したもの
  2. DrawGraphFでx座標に-0.5したもの
  3. DrawGraphFでy座標に-0.5したもの
  4. DrawGraphFでx座標とy座標に各-0.5したもの

要するに標準の場合と小数の場合の比較だ。

ニアレストネイバーの場合

SetDrawModeでニアレストネイバーを指定した場合は次のようになる。

DrawGraphF 描画モード比較 nearest neighbor

DrawGraphFで座標を小数で指定しているが、表示は1ピクセル単位の整数の座標で指定したものと多分同じになっている。

バイリニアの場合

SetDrawModeでバイリニアを指定した場合は次のようになる。

DrawGraphF 描画モード比較 bilinear

静止画で見ると汚く表示されているが、動きのある場合はこれでも問題ない。

描画モードの使い分け

描画モードによって適している状況が異なる。

画像を移動させて表示するような場合はバイリニアでないとガクガクした動きになってしまう。

必要な処理が終わったら描画モードを戻しておかないと余計な問題が生じてしまうかもしれない。

試していないがバイリニアのほうが処理の負荷は高い。

実際にどれくらい影響があるのかは未確認。

関連しそうな関数

詳細は不明だが関連しそうな関数を挙げておく。

将来何かあった際に詳しく調べてみるといいだろう。

引用部分はDxLib.hから抜粋している。

SetUseTransColorGraphCreateFlag

int	SetUseTransColorGraphCreateFlag(int Flag);

透過色機能を使用することを前提とした画像データの読み込み処理を行うかどうかを設定する( TRUE にすると SetDrawMode( DX_DRAWMODE_BILINEAR ); をした状態で DrawGraphF 等の浮動小数点型座標を受け取る関数で小数点以下の値を指定した場合に発生する描画結果の不自然を緩和する効果があります ( デフォルトは FALSE ) )

GetDrawFloatCoordType

int	GetDrawFloatCoordType(void);

DrawGraphF等の浮動小数点値で座標を指定する関数における座標タイプを取得する( 戻り値 : DX_DRAWFLOATCOORDTYPE_DIRECT3D9 など )

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です