まず文字ですが、前回LPD3DXFONT(D3DebugFont)に必要なパラメータを入れて初期化してるので、あとはDrawTextA()で表示するだけです。ちなみにこの関数、DirectX8と同名で別物だったんで、ちょっと苦労した(汗) ネットで検索しても、新旧両方のバージョンが入り混じってるからなぁ。
次はスプライト(画像)を表示させます。DirectX8以降、スプライトは3Dテクスチャとして扱われてるので、テクスチャ関連のクラスを使います。ファイルからD3DXCreateTextureFromFile()でテクスチャとして読み込み、オブジェクトLPDIRECT3DTEXTURE9に格納します。そしてDraw()で描画します。今回のスプライトまわりは直打ちで汚いので、後ほど作り直します。
それらを画面に出力します。背景をClear()で青に塗りつぶし、描画部分をBeginScene()とEndScene()で囲います。最後にPresent()で出力。
ようやく画面が表示されました。そういえばフレームレートは何となく50FPSにしてみた。次回はグラフィックまわりを突き詰めるか、入力系のどちらかにします。
//--------------------------------------------------------- // テクスチャ読み込み BOOL CGraphicsBase::CreateTextureBase(LPCTSTR filename, LPDIRECT3DTEXTURE9 *tex) { if(D3DXCreateTextureFromFile(D3Device, filename, tex)!=S_OK) { MessageBox(NULL, "テクスチャの読み込みに失敗しました", "CGraphicsBase::CreateTextureBase", MB_OK); return E_FAIL; } return S_OK; } //--------------------------------------------------------- // スプライト描画 void CGraphicsBase::DrawSpriteBase(int tex_no, RECT drawRect, int x, int y, int damage) { RECT srcRect; SetRect(&srcRect, 0, 0, 128, 128); // テクスチャ切り出し D3DXVECTOR3 Center=D3DXVECTOR3(0, 0, 0); // センター D3DXVECTOR3 Position=D3DXVECTOR3(100, 100, 0); // 位置 // 描画 D3Sprite->Draw(Texture[tex_no]->Tex, &srcRect, &Center, &Position, D3DXCOLOR(1,1,1,1)); } //--------------------------------------------------------- // レンダリング void CGraphicsBase::Render() { RECT drawRect; char text[100]; if (D3Device==NULL) { return; } // バックバッファを青でクリアする D3Device->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0); // シーン開始 D3Device->BeginScene(); // スプライト描画 D3Sprite->Begin(D3DXSPRITE_ALPHABLEND); SetRect(&drawRect, 0, 0, 128, 128); DrawSpriteBase(0, drawRect, 100, 100); D3Sprite->End(); // デバッグ文字表示 if (System->DebugFlag==1) { SetRect(&drawRect, 0, 0, strlen(text)*32, 32); System->GetFPS(text); D3DebugFont->DrawTextA(NULL, (char *)text, -1, &drawRect, (DT_SINGLELINE | DT_LEFT | DT_TOP | DT_NOCLIP), 0xFFFFFFFF); } // シーン終了 D3Device->EndScene(); // シーンを表示する D3Device->Present(NULL, NULL, NULL, NULL); }