DXライブラリでの2D用カメラ作成について
Posted: 2014年4月27日(日) 05:46
おはようございます。
ここ最近、DXライブラリとvc++2008で作ったマップエディタでステージ制作ばかりをしているイマダニです。
今回はそのマップエディタに
拡大縮小機能(マウスホイールで画面の拡大縮小ができる。saiなどのペイントソフトについているような機能)
といった、まあ、下記の動画の様な感じの機能をつけようとしたのが発端です。
上記の機能を実現する2Dカメラを作ろうと
以下のサイトや本などを参考にしつつ、
directx メモ – 2Dカメラの作り方(directx9)
http://ookumaneko.wordpress.com/2012/02 ... 9directx9/
ゲーム開発のための数学・物理学入門
以下の様な考えでコードを組んだのですが、
①カメラの位置、注視点、拡大率を設定
②それらの情報を元に行列を生成
③その行列をもとに描画する
③がわからなくて困ってます。上記のdirectxを用いた解説では、directxの描画機能でどうにかしてますが……
Dxライブラリでは、カメラの情報が詰まった行列を
どう描画に反映すればいいのでしょうか?
アドバイスお願いします。
ここ最近、DXライブラリとvc++2008で作ったマップエディタでステージ制作ばかりをしているイマダニです。
今回はそのマップエディタに
拡大縮小機能(マウスホイールで画面の拡大縮小ができる。saiなどのペイントソフトについているような機能)
といった、まあ、下記の動画の様な感じの機能をつけようとしたのが発端です。
上記の機能を実現する2Dカメラを作ろうと
以下のサイトや本などを参考にしつつ、
directx メモ – 2Dカメラの作り方(directx9)
http://ookumaneko.wordpress.com/2012/02 ... 9directx9/
ゲーム開発のための数学・物理学入門
以下の様な考えでコードを組んだのですが、
①カメラの位置、注視点、拡大率を設定
/*カメラクラス*/
class Camera2D{
public:
Vector2D pos; //カメラの座標
Vector2D Lpos; //カメラの注視点。LookPositionてきな
Vector2D scale; //拡大率
Camera2D(); //コンストラクタ
void Move(); //カメラノムーブ
MATRIX GetMatrix();//カメラ行列生成
};
void Camera2D::Move(){
//移動量
Vector2D move;
move.x=2.0;move.y=2.0;
//カメラの位置移動処理
if(CheckKey(KEY_INPUT_A)>0){//キー入力で
pos.x-=move.x;
}
if(CheckKey(KEY_INPUT_D)>0){
pos.x+=move.x;
}
if(CheckKey(KEY_INPUT_W)>0){
pos.y-=move.y;
}
if(CheckKey(KEY_INPUT_S)>0){
pos.y+=move.y;
}
//カメラの拡大率走査
if(CheckMouse(MOUSE_INPUT_LEFT)>0){//マウス左クリックで拡大
scale.x+=0.1;
scale.y+=0.1;
}
if(CheckMouse(MOUSE_INPUT_RIGHT)>0){//縮小
scale.x-=0.1;
scale.y-=0.1;
}
}
MATRIX Camera2D::GetMatrix(){
MATRIX m1;
VECTOR Pos;
VECTOR LPos;
VECTOR Scale;
/*ベクトルを2dから3dに*/
Pos.x = pos.x;//カメラの位置
Pos.y = pos.y;
Pos.z = 0.0;
Scale.x = scale.x;//拡大率
Scale.y = scale.y;
Scale.z = 0.0;
LPos.x = Lpos.x;
LPos.y = Lpos.y;
LPos.z = 1.0;
/*上記を元に行列を生成*/
m1 = MMult(MGetScale(Scale),MGetTranslate(Pos));//拡大×平行移動
return m1;
}
// 行列をスプライトに設定する
HR( _sprite->SetTransform( &m1 ) );
// 実際に描画する
_sprite->Draw( texture, NULL, &ori, NULL, colour );
どう描画に反映すればいいのでしょうか?
アドバイスお願いします。