ページ 11

アルファブレンディング(フェードイン・フェードアウト)

Posted: 2010年1月03日(日) 14:17
by dic
DxLibは使ってないのですが、自作のライブラリで
アルファブレンディング(フェードイン・フェードアウト)を
行いたいのです
本を参考に下のソースまではできたのですが、付属のCD-ROMをなくしてしまい
かんじんなところがわからない状態です

サーフェイスをロックして、書き込むのですが、反映されません
どうやれば、反映されるのでしょうか?

////////////////////////////////////////////////////////////////////////////////////////////////////////
void    DXDRAW3::Test( LPDIRECTDRAWSURFACE7 *pSurface, int i )
{
    UINT    pPixel;
    DDSURFACEDESC2    ddsd;
    
    ZeroMemory( &ddsd, sizeof(ddsd) );
    ddsd.dwSize = sizeof(ddsd);
    if( (*pSurface)->Lock( NULL, &ddsd, DDLOCK_WAIT, NULL ) == DD_OK )
    {
        char    hoge[80];
        int    x = 50;
        int    y = 50;
        for( x=0; x<50; x++ )
        {
            for( y=0; y<50; y++ )
            {
                pPixel = (UINT)ddsd.lpSurface + y * ddsd.lPitch + x;

                pPixel += 1;    //    反映されない
            }
        }

        (*pSurface)->Unlock(NULL);
    }
}

Re:アルファブレンディング(フェードイン・フェードアウト)

Posted: 2010年1月03日(日) 18:37
by たかぎ
> 自作のライブラリで

では、自作のライブラリそのもの(できればソースも)とドキュメントを補足しないと、誰も適切な回答ができないと思います。

Re:アルファブレンディング(フェードイン・フェードアウト)

Posted: 2010年1月03日(日) 19:50
by Justy
 せめて環境くらい書きましょう。

 DirectDrawを使って自作ライブラリを作っている、といったところでしょうか。


> どうやれば、反映されるのでしょうか?

[color=#d0d0ff" face="monospace] pPixel = (UINT)ddsd.lpSurface + y * ddsd.lPitch + x;
pPixel += 1; // 反映されない
[/color]

 pPixelに期待する役割はなんとなく想像できますが、pPixelの型が Windows環境でよく使われる
UINT……unsigned intだとするならば、このコードでは pPixelは期待通りに機能していないでしょう。

 なぜなら整数型である pPixelに対して代入したり +1をしても、ただローカル変数の値が変わるだけで、
(ループ内では)サーフェースに対するアクセスは一切行われないからです。

 それどころか最適化してコンパイルしたら2重ループごとさくっと消えて無くなってしまいそうです。


 “まずは” pPixelをポインタにするべきでしょう。

DirectDrawメモ (10、ロック、アンロックによるドット描画)
http://m-niwa.hp.infoseek.co.jp/DirectX/directdraw.html

Microsoft DirectX 開発者 FAQ (サーフェスに対して 1 つのピクセルをどのように書きますか)
http://msdn.microsoft.com/ja-jp/library/cc973416.aspx

Re:アルファブレンディング(フェードイン・フェードアウト)

Posted: 2010年1月04日(月) 16:58
by dic
>たかぎさん、Justyさん
回答ありがとうございます
環境が今回は、必要でしたね すいません
LPDIRECTDRAWSURFAcE7 ってあるんで、分かると思ったのですが

DirectX 7 の環境です

ライブラリといいましたが、必要な部分のみ掲載しました


>リンク先
とてもわかりやすいサイトをありがとございます

そうですね、ローカル変数にいくら変更を加えても意味ないですね
なかなかロックという概念が理解できていないのです

リンク先を参考に改良します
また、つまづいたら質問します