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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
dic

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

#1

投稿記事 by dic » 15年前

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:アルファブレンディング(フェードイン・フェードアウト)

#2

投稿記事 by たかぎ » 15年前

> 自作のライブラリで

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

Justy

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

#3

投稿記事 by Justy » 15年前

 せめて環境くらい書きましょう。

 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

dic

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

#4

投稿記事 by dic » 15年前

>たかぎさん、Justyさん
回答ありがとうございます
環境が今回は、必要でしたね すいません
LPDIRECTDRAWSURFAcE7 ってあるんで、分かると思ったのですが

DirectX 7 の環境です

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


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

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

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

閉鎖

“C言語何でも質問掲示板” へ戻る