トップページ > 過去ログ > 記事閲覧
ブレンド画像と透過色を併用したときの妙な挙動
名前:犬福 日時: 2006/12/14 11:37

こんにちは、犬福です。 今自作のプログラムで、ブレンドと透過色設定を併用して画像を描画したときに妙な表示になることがあり、困ってます。詳しくは以下のような現象が起きます。 ・まず、あるクラスがメンバー変数に画像を読み込み、ハンドルを設定します。 ・次にその画像を、ブレンドモードを設定した状態で表示します。(透過色付き) ・このとき、きちんと透過色は抜かれ、ブレンドモード(アルファ合成)も正しく反映されて表示されます。 ・ある程度処理をしたあとクラスを削除し、再びそのクラスのインスタンスを作成します。 ・そしてこの画像を表示すると、アルファ合成は正しく反映されているものの透過色が抜かれていない状態で表示されているのです。 ・アルファブレンドの不透明度はループにより変動しているのですが、どういうわけか不透明度が高まる(つまり限りなく不透明ではなくなる)一瞬だけ透過色が抜かれているように見えます。 分かりにくいかもしれませんが、このような現象が起きます。 分からないのは、一番最初に表示するときだけ(最初のループのときだけ)正しく表示され、二回目以降のループではおかしくなることと、おかしな状態のときでも一瞬だけ透過されて表示される点です。 ちょっと複雑なプログラムなのでソースを書くことはできませんが、何か思い当たる点などありましたら教えて頂けたら、と思います。 ではどうぞよろしく・・;

Page: 1 |

Re: ブレンド画像と透過色を併用したときの妙な挙動 ( No.1 )
名前:mas 日時:2006/12/14 17:40

> ちょっと複雑なプログラムなのでソースを書くことはできませんが、 > 何か思い当たる点などありましたら教えて頂けたら、と思います。 挙げられた情報だけで原因を推測できる方がいるかもしれませんが、 私には予想もつきませんでした。 デバッグの基本ですが、問題が発生する最小限のソースを書いてください。 そうしないとクラスの設計が悪いのか、Dxライブラリの関数の使い方がおかしいのか等、 問題の切り分けができませんし、規模が大きいプログラムほどバグを探すのは困難です。
Re: ブレンド画像と透過色を併用したときの妙な挙動 ( No.2 )
名前:管理人 日時:2006/12/15 13:14

 犬福さんどうも、DXライブラリの管理人です。  宜しければ以下のQ・Aをチェックしてみて下さい。 Q1.SetScreenMemToVramFlag( FALSE ); を DxLib_Init の前に 実行してソフトウエアレンダリングモードで起動した場合は正常に 表示される YES:Q2へ  NO:A1へ Q2.犬福さんの環境で件の現象が発生するプログラムを私の環境で 実行した場合は正常に表示される YES:A2へ  NO:A3へ A1  プログラム的な原因が考えられます。 A2  犬福さんのPCに搭載されているグラフィックチップのドライバに 不具合がある可能性が考えられます。ドライバの更新で改善されない 場合、申し訳ありませんが SetScreenMemToVramFlag( FALSE );を DxLib_Init の前に記述してソフトウエアレンダリングモードで DXライブラリをお使いになって下さい。 A3  DXライブラリの描画処理プログラムに原因がある可能性が高いです。  Q2は私の環境での確認となりますので、もしQ1がYESでしたら、 不都合が無ければ BQE00322(アットマーク)nifty.com に表示の不具合が 発生するプロジェクトを丸ごと圧縮して送ってやって下さい。m(_ _)m
Re: ブレンド画像と透過色を併用したときの妙な挙動 ( No.3 )
名前:犬福 日時:2007/01/06 02:27

返事が随分遅くなって申し訳ありません。 Q&Aをチェックしてみました。 まず、Q1ですが、これは正常に動作しました。 それで、次にグラフィックチップのドライバを更新してみたのですが、症状は変りませんでした。 ソフトウェアレンダリングモードで動作させれば 確かに正常に動くんですがかなり描画速度に差が出てしまいますので できればハードウェア機能を使いたいところなんですが・・。 もしよろしければ管理人様の環境で動作するかチェックしてみてもらえませんでしょうか? チェックすべき点は(おかしい所は)圧縮ファイル中のreadme.txtに書いておきます。 それではどうぞよろしくお願い致します。
Re: ブレンド画像と透過色を併用したときの妙な挙動 ( No.4 )
名前:管理人 日時:2007/01/08 14:32

 犬福さんどうも、DXライブラリの管理人です。  メールを拝見致しました。  添付して頂いたプロジェクトを実行しましたところ、こちらでも 同様の現象が発生しました。つまり、上記Q&AのA3に当たり、 見事にDXライブラリに原因がありました。m(_ _;m  修正したバージョンをアップしましたので、宜しければ お使いください。m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe (中身を既存のファイルに上書きして『リビルド』をして下さい)  因みに、犬福さんのプログラムにも一点間違っている個所がありました。  ini ファイルの SoftwareRendering が True の時に SetUse3DFlag に TRUE を False の時に FALSE を渡していますが、これは逆で、 ソフトウエアレンダリングモードにする場合は SetUse3DFlag に FALSE を渡し、3D機能を使用する場合は TRUE を渡す必要があります。 (なので、今まで犬福さんはソフトウエアレンダリングモードで 実行していたということになります(SetScreenMemToVramFlag( FALSE ); を実行した場合と、DxLib_Init の後に SetUse3DFlag( FALSE ); を 実行した場合では同じソフトウエアレンダリングモードでも処理が 少し変わり、後者で実行されるプログラムにバグがありました))
Re: ブレンド画像と透過色を併用したときの妙な挙動 ( No.5 )
名前:犬福 日時:2007/01/10 01:21

こんばんは、犬福です。 修正バージョン確認しました。 お忙しい中いつもながらの迅速な対応ありがとうございます。 間違っている箇所の指摘ありがとうございました。 SetUse3DFlagの動作とSetScreenMemToVramFlagの動作をあいまいに理解してたみたいです^^; ともかく原因が分からず長らく困ってた問題が解決してよかったです。 どうもありがとうございました。

Page: 1 |