|
今回は画像を左右反転して描画します そろそろ全コード書くのもだるくなってきたので 今回使うファイルは次のようになってます。どぞー(-ω-)つ旦 zipでほしい人はこちら sprite.hのDrawメンバ関数の引数にisTurnフラグを追加します #pragma once
// Direct3Dの各種ヘッダーのインクルードが必要なため
// すでにまとめてあるヘッダーをインクルードする
#include "direct3d.h"
// スプライトクラス(2D板ポリゴン)
class Sprite
{
public:
// 他のメンバーは15回と同じなので略
//////////////////////////////////////////////////////////////////////////////////////////////////
// 引数isTurnを追加(省略可能な引数)
void Draw(IDirect3DDevice9* pDevice3D,IDirect3DTexture9* pTexture,bool isTurn = false);
//////////////////////////////////////////////////////////////////////////////////////////////////
};
sprite.cppでDrawメンバ関数の実装処理を変更します #include "sprite.h"
// 他のメンバー関数の実装は15回と同じなので略
//////////////////////////////////////////////////////////////////////////////////////////////////////
void Sprite::Draw(IDirect3DDevice9* pDevice3D,IDirect3DTexture9* pTexture,bool isTurn)
{
// 頂点情報セット
Vertex vtx[4]={
{ pos.x + width/2, pos.y - height/2, 0.0f, 1.0f,(isTurn ? 0.0f : 1.0f), 0.0f},
{ pos.x + width/2, pos.y + height/2, 0.0f, 1.0f,(isTurn ? 0.0f : 1.0f), 1.0f},
{ pos.x - width/2, pos.y - height/2, 0.0f, 1.0f,(isTurn ? 1.0f : 0.0f), 0.0f},
{ pos.x - width/2, pos.y + height/2, 0.0f, 1.0f,(isTurn ? 1.0f : 0.0f), 1.0f}
};
//////////////////////////////////////////////////////////////////////////////////////////////////////
// テクスチャセット
pDevice3D->SetTexture(0,pTexture);
// 頂点構造体宣言セット
pDevice3D->SetFVF(SPRITE_FVF);
// スプライト描画
pDevice3D->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,vtx,sizeof(Vertex));
}
ポイントはただ1点、 頂点情報のUV値のU値をひっくりかえしているだけです 使うとき(turn.cpp側)は次のようになります ///////////////////////////////////////////////////////////////////////////////////////////////
// 描画開始
if(SUCCEEDED(direct3d.pDevice3D->BeginScene()))
{
DWORD ClearColor = 0xff808080; // 背景クリア色
// 背景クリア
direct3d.pDevice3D->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_STENCIL | D3DCLEAR_ZBUFFER, ClearColor, 1.0f, 0 );
// スプライト描画
sprite[0].Draw(direct3d.pDevice3D,cartex.pTexture); // 省略した場合、引数isTurnはfalseになる
sprite[1].Draw(direct3d.pDevice3D,cartex.pTexture,true);
// 描画終了
direct3d.pDevice3D->EndScene();
}
// 描画反映
direct3d.pDevice3D->Present( NULL, NULL, NULL, NULL );
///////////////////////////////////////////////////////////////////////////////////////////////
実行結果は次のようになります 上下反転に関しては略しますが
|