PR

【DXライブラリ】画像を拡大・縮小・回転させて表示する

DXライブラリで画像を拡大・縮小・回転させて表示する方法について説明しています。ついでに自由変形も。2D版と3D版両対応。

今回はサンプルコードなしです。大した処理をすることがないので。

2Dゲーム版

2Dゲームで画像を拡大・縮小・回転させて表示する場合、 DrawRotaGraph() を使って表示する。※他の関数もありますが DrawRotaGraph() で拡大・縮小・回転を一括でできるのでこれが楽です。

宣言 int DrawRotaGraph(int x, int y, double ExRate, double Angle, int GrHandle, int TransFlag)
概要 メモリに読み込んだ画像の回転描画
引数 int x, y 描画する画像の中心座標
double ExRate 画像の拡大率(1.0で等倍)
double Angle 描画角度(単位はラジアン)
int GrHandle 描画する画像ハンドル
int TransFlag 透明色を有効にするか(TRUEで有効)
戻り値 -1以外 正常
-1 エラー発生

通常の画像表示をする DrawGrpah() との違いはまず画像を表示する座標。DrawGrpah() では画像の左上が基準となっていたが DrawRotaGraph() では引数の x, y の位置が基準となる。基本は画像の中心の座標を指定する。

また回転させる場合、角度の値はラジアン単位(弧度法)で指定する必要がある。π/2とかのあれ。度数ではないことに注意。それと2D画面上でのy軸は下方向に正なので回転方向は時計回りになることにも注意。

拡大縮小回転ではなく自由変形ができる DrawModiGraph() もある

宣言 int DrawModiGraph(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, int GrHandle, int TransFlag)
概要 2D空間に自由変形を加えた画像を描画する
引数 int x1, y1 描画する画像の左上の座標
int x2, y2 描画する画像の右上の座標
int x3, y3 描画する画像の左下の座標
int x4, y4 描画する画像の右下の座標
int GrHandle 描画する画像のハンドル
int TransFlag 透明色を有効にするか(TRUEで有効)
戻り値 0 成功
-1 エラー発生

DXライブラリ本家によると画像変形の計算処理の関係上完全な自由変形はできないとのこと。なので表示結果がおかしくなる場合がある。

3Dゲーム版

3D空間で奥行きに合わせて画像を拡大・縮小・回転させて表示する場合は DrawBillboard3D() を使う。この関数は通常の画像表示方法のページで紹介しているが改めて再掲。

宣言 int DrawBillboardGraph(VECTOR Pos, float cx, float cy, float Size, float Angle, int GrHandle, int TransFlag)
概要 メモリに読み込んだ画像を3D空間に描画
引数 VECTOR Pos 画像を描画する座標
float cx, cy 描画する画像の中心座標(0.0f ~ 1.0f)
float Size 画像の拡大率(1.0で等倍)
float Angle 描画角度(単位はラジアン)
int GrHandle 描画する画像ハンドル
int TransFlag 透明色を有効にするか(TRUEで有効)
戻り値 0 成功
-1 エラー発生

Posは3D空間で描画したい画像の座標。DrawRotaGraph() と同じく画像の中心座標を指定することになるがこちらは0.0f ~ 1.0fの範囲で指定するのに注意。画像の中心を指定した場合はcx, cyともに0.5fを指定する。

角度も度数ではなくラジアン単位(弧度法)なので注意。

こちらも自由変形できる関数 DrawModiBillboard3D() が用意されている

宣言 int DrawModiBillboard3D(VECTOR Pos, float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4, int GrHandle, int TransFlag)
概要 3D空間に自由変形を加えた画像を描画する
引数 VECTOR Pos 3D空間で描画する画像の座標
float x1, y1 描画する画像の右上の座標
float x2, y2 描画する画像の右上の座標
float x3, y3 描画する画像の左下の座標
float x4, y4 描画する画像の右下の座標
int GrHandle 描画する画像のハンドル
int TransFlag 透明色を有効にするか(TRUEで有効)
戻り値 0 成功
-1 エラー発生

こちらも画像変形の処理の関係で完全な自由変形はできないとのこと。

コメント

タイトルとURLをコピーしました