トップページ > 記事閲覧
α値情報つきのスクリーンに対する減算ブレンドについて
名前:tripper 日時: 2019/05/04 20:43

いつも大変お世話になっております。 MakeScreen で UseAlphaChannel=TRUE を指定して作成したスクリーンに対して DX_BLENDMODE_SUB (もしくは DX_BLENDMODE_PMA_SUB) の描画を行うと、RGBと同時にα値の減算も行われます。 特定の箇所のみスクリーンを透過させるなど、この挙動にも様々な用途があると思いますが、 RGB値のみの減算を行いたい(その時点でスクリーンに既に描画されている絵の色を暗くしたい/色を変更したい)場合は どうすればよいでしょうか? 現状ですと GraphBlendBlt の DX_GRAPH_BLEND_DIFFERENCE を使用すれば期待する結果が得られる (DX_SCREEN_BACK や UseAlphaChannel=FALSE として作成したスクリーンに対しての描画と同じにできる)ことを 確認しておりますが、動作速度の問題で1フレームに数回程度しか使用できそうにないです。 何か良い方法があればぜひご教示いただきたいと思います...。
メンテ

Page: 1 |

Re: α値情報つきのスクリーンに対する減算ブレンドについて ( No.1 )
名前:管理人 日時:2019/05/05 03:40

既存の機能ではスマートな方法が無かったので、専用の機能を追加しました よろしければ機能を追加したこちらのバージョンをダウンロードしてください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.2 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_ARM.zip // Android版 ARM用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_ARM64.zip // Android版 ARM64用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_x86.zip // Android版 x86用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_x64.zip // Android版 x64用 https://dxlib.xsrv.jp/temp/DxLibiOSTest.zip // iOS版 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい) 以下の関数を追加しました // 描画先のアルファチャンネルの内容を書き換えるかを設定する( FALSE:書き換えない TRUE:書き換える( デフォルト ) ) int SetWriteAlphaChannelFlag( int Flag ) ; SetWriteAlphaChannelFlag( FALSE ) ; を実行すると、描画先のアルファ値が変化しなくなります よろしければお試しください m(_ _)m ただ、こちらの機能、DXライブラリが使用する Direct3D の機能としては若干新し目のものを 使用しているので、2012年〜2013年以前の低性能ノートパソコンなどでは機能しないかもしれません… ( DirectX 10 以降にネイティブ対応したグラフィックスデバイスであれば100%機能しますが、 DirectX 9 時代のグラフィックスデバイスだと結構後期のものしか対応していないと思います… ( 特に DirectX 9 までしか対応していない Intel のオンボードチップだと高確率で対応していないと思います… ) )
メンテ
Re: α値情報つきのスクリーンに対する減算ブレンドについて ( No.2 )
名前:tripper 日時:2019/05/05 11:20

素早いご対応、ありがとうございます! 追加していただいた関数を使用することで希望する機能を実現できました。 こちらの環境では全てのコンピュータで問題なく動作しましたが、 動作しない環境では Flag=false としても無視されるということでしょうか? (想定どおりに動作しているかしていないかを実行時に確認したいと思っています)
メンテ
Re: α値情報つきのスクリーンに対する減算ブレンドについて ( No.3 )
名前:管理人 日時:2019/05/06 03:50

昨日のバージョンではアルファチャンネルへの書き換えを抑制できるかどうかをチェックする方法が無かったので、 SetWriteAlphaChannelFlag( FALSE ) ; を使ってアルファチャンネルへの書き換えを抑制できるかどうかを 取得できる関数を追加しました よろしければこちらをダウンロードしてください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.2 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_ARM.zip // Android版 ARM用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_ARM64.zip // Android版 ARM64用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_x86.zip // Android版 x86用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_x64.zip // Android版 x64用 https://dxlib.xsrv.jp/temp/DxLibiOSTest.zip // iOS版 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい) 次の関数を追加しました // 描画先のアルファチャンネルの内容を書き換えないことができるかどうかを取得する // 戻り値 TRUE:書き換えないことができる FALSE:書き換えないことができない int CheckSeparateAlphaBlendEnable( void ) ; よろしければお使いください m(_ _)m > 動作しない環境では Flag=false としても無視されるということでしょうか? はい、動作しない環境では SetWriteAlphaChannelFlag( FALSE ) ; としても無視されて アルファチャンネルの内容が書き換わります
メンテ
Re: α値情報つきのスクリーンに対する減算ブレンドについて ( No.4 )
名前:tripper(解決済) 日時:2019/05/09 07:59

描画結果を比較して判定しようと思っておりましたが、 わざわざ判定用の関数まで作成していただき本当にありがとうございます! こちらで解決済みとさせていただきます。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存