トップページ > 過去ログ > 記事閲覧
座標が小数の画像を滑らかに表示したい
名前:しんしゃ 日時: 2008/04/06 22:21

小さくてとても遅いオブジェクトを移動させるとき、普通ガタッガタッと動いて見えてしまいますが 弾幕STGなどで、滑らかに表示されているのをたまに見かけます。 DrawGraphF()で小数を指定できるみたいですが、表示は整数に戻されてるみたいです。 SetDrawMode()のバイリニア法でやってみてもガタガタしてしまいます。 なにか描画モードを変える関数があるのでしょうか? それとも、半透明などを使って自力でできるのでしょうか? 教えてください

Page: 1 |

Re: 座標が小数の画像を滑らかに表示したい ( No.1 )
名前:憂煉 日時:2008/04/06 22:47

ソースコードを覗いてみたら浮動点少数を整数に変換して表示していました。 確かDirectXの描画ではfloatやdoubleを座標に使うことが多かったはずなのですが、わざわざ整数にしているのには何か訳がありそうです。 それと、見ていて気づいたのですが整数型で引数を受け取るDrawRotaGraphが内部的にDrawRotaGraphFを呼んでいて、さらにその中でキャストされているのが気になります。 整数→浮動少数→整数のキャストが行われています。 あと、ST_DrawXX系の関数は引数が多い関数が多いのでinline指定した方がいいと思います。 おそらくコンパイラが勝手に最適化するとは思いますが。
Re: 座標が小数の画像を滑らかに表示したい ( No.2 )
名前:管理人 日時:2008/04/13 01:23

> しんしゃさん SetDrawMode( DX_DRAWMODE_BILINEAR ); でバイリニアモードに変更した後、DrawGraphF で小数点以下の座標を 渡すようにすれば綺麗に描画されます。 サンプルをアップしましたので宜しければご覧下さい。 http://homepage2.nifty.com/natupaji/temp/TamaTest.zip 因みに、サンプルで使用している画像のようにαチャンネルで縁取り をしている画像の方が滑らかになります。 > 憂煉さん 確かに DirectDraw 用の描画コードでは速度のために整数に戻していますが、 多くの環境で使用される Direct3D 用の描画コードでは整数に変換した値は 描画領域判定にのみ使用していますので、DrawGraphF等の末尾Fの関数と バイリニア描画で滑らかな描画は実現できるようになっています。 inline については了解しました。
Re: 座標が小数の画像を滑らかに表示したい ( No.3 )
名前:しんしゃ 日時:2008/04/13 15:20

すみません。 サンプルと比べてソースを見直してみたら、計算するときに 型変換がうまくできてなくて切り捨てた値を入れていたみたいです。 皆さん回答ありがとうございました。

Page: 1 |