0

High Level Shader Language(HLSL)、Direct3D Per Pixel Motion Blur、Vertex Shaderなどの高度な3D機能を使用せずに、DirectX9(d3dの2Dグラフィックス機能)を使用して.png画像のぼかしを行う方法を教えてください。

詳細な説明:

サーフェス上に 6 つの隣接する .png 画像 (6 つのスプライト テクスチャ) の行があり、テクスチャの位置を円形に移動/変更します (1->2->3->4->5->6)。 ->1->2->3->4->5->6) 回転効果 (2 次元の回転) の感触を得るためにアルファ成分を変化させます。

問題:

さまざまなスプライト テクスチャ アルファ値とさまざまな 1 秒あたりのフレーム数 (fps) を使用しても、連続的な画像の変化とは別に回転の本当の感覚は得られませんでした。非常に多くのWeb検索の後、その場で.pngファイルにぼかし効果(ガウスぼかし/ボックスぼかし)を適用すると、回転効果を得ることができるという手がかりが見つかりました。

しかし、ターゲット プラットフォームでの 3D サポートの制限により、回転効果 (モーション ブラーのようなもの) を取得するための 2D 機能とは別に、direct3d の高度な 3D 機能を使用できません。

親切なヘルプ/提案/サンプル コード/この問題を解決するための正しい道を教えてくれたフォーラム メンバーを心から歓迎します。

サンプルコード:

void D3DGraphics::DrawSprite(LPDIRECT3DTEXTURE9 &texture,ID3DXSprite* pSprite, DXVECTOR2 Trans_11, int ImgIndex) {

D3DXMATRIX Matrix;
pDevice->Clear( 0,NULL,D3DCLEAR_STENCIL,D3DCOLOR_XRGB(0,0,0),0.0f,0 );

pSprite->Begin(D3DXSPRITE_ALPHABLEND);
D3DXMatrixTransformation2D(&Matrix, NULL, NULL, NULL, NULL, 0, &Trans_11);
pSprite->SetTransform(&Matrix1);

--> Need blur effect before write operation / while loading .png file as texture <---

pSprite->Draw(texture[ImgIndex], NULL, NULL, NULL, 0xFFFFFFFF); 
pSprite->End();

}

4

2 に答える 2

1

滑らかなアニメーションを作成するには 6 枚の画像を循環させるだけでは不十分な場合は、12 枚または 24 枚の画像を循環させてみませんか? 「オリジナルのアートワーク」が 6 つしかない場合でも、DirextX で実行するよりも、Photoshop/imagemagick タイプのツールを使用して中間イメージを生成し、アプリにそれらをロードさせる方が簡単です。

于 2013-01-25T23:00:48.553 に答える