トップページ > 過去ログ > 記事閲覧
シェーダについて
名前:愛煙家 日時: 2011/01/25 18:36

いつもお世話になっております。 シェーダを使って描画を行う時、 LoadGraph()で読み込んだグラフィックハンドルを使うと正しく描画されるのですが、 LoadDivGraph()だと表示がおかしくなってしまいます。 また、SetDrawBlendMode()でブレンドモードを設定した後に、 シェーダでの描画を行うとブレンドモードが反映されません。 仕様的に出来ないのでしょうか? 宜しくお願い致します。

Page: 1 |

Re: シェーダについて ( No.1 )
名前:いっち 日時:2011/01/26 23:04

> シェーダを使って描画を行う時、 > LoadGraph()で読み込んだグラフィックハンドルを使うと正しく描画されるのですが、 > LoadDivGraph()だと表示がおかしくなってしまいます。 LoadDivGraph や DerivationGraph で作成したグラフィックハンドルはポリゴンの描画に使用できないそうなので、 その影響ではないでしょうか。
Re: シェーダについて ( No.2 )
名前:愛煙家 日時:2011/01/27 00:56

やはりそうですか・・・ 管理人さんの見解を待ちます ブレンドモードは反映されないというのは間違いで、 モードによっては変化するものもあります。 加算ブレンド→加算されているが、値を変えても変化しない 減算ブレンド→減算されているが、値を変えても変化しない アルファブレンド→変化なし 宜しくお願い致します。
Re: シェーダについて ( No.3 )
名前:管理人 日時:2011/02/05 23:19

いっちさんのご返信にもありますが、ポリゴンの描画には DerivationGraph や LoadDivGraph で作成したグラフィックハンドルを使うと意図通りの描画結果を得ることができません ブレンドモードについてですが、シェーダーを使用した描画の場合は SetDrawBlendMode の第二引数は無視されます、 第二引数を使用する処理をピクセルシェーダーで行うので、ライブラリ側からは手が出せないんです・・・ アルファブレンドのブレンド率( SetDrawBlendMode の第二引数 )はピクセルシェーダーの出力カラーのaになりますので、 動的にブレンド率を変更したい場合は ・頂点カラーのa( ( VERTEX2DSHADER 構造体の dif の a )に SetDrawBlendMode の第二引数を代入して、ピクセルシェーダーで  その頂点カラーの a とテクスチャカラーのaの値と乗算した結果を戻り地の a に代入することで透明度を操作する ・ピクセルシェーダーの定数に SetPSConstF で SetDrawBlendMode の第二引数を代入して、ピクセルシェーダーで  その定数とテクスチャカラーのaの値と乗算した結果を戻り値の a に代入することで透明度の操作をする のどちらかの方法を使う必要があります m(_ _;m
Re: シェーダについて ( No.4 )
名前:愛煙家 日時:2011/02/08 22:36

いつもお世話になっております。 返信ありがとうございます。 やはりそうですか、とりあえずは画像ファイルを分割して LoadGraph を使おうと思います。 アルファブレンドの件ですが、後者の方法で試してみたところ、全く透過されませんでした。 試しに、戻り値の a の値を 0.5 とか 1.0 とかの直値にしてみたりしましたが変化ありません。 いろいろ値を変えて試してみたところ、-0.1 にすると何も表示されなくなりました。 因みに以下の URL に記載したソースの a の代入文のところを以下のように書き換えて試してます。 - psout.Output.a = texc.a; のところを、 + psout.Output.a = texc.a * gBright.a; または、 + psout.Output.a = 0.5; hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=2083 何が間違っているのか検討もつかないので、 お忙しいところ恐縮ですが、助言を頂けたら幸いです。 宜しくお願い致します。
Re: シェーダについて ( No.5 )
名前:管理人 日時:2011/02/13 19:07

> hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=2083 ↑こちらのサンプルプログラムではブレンドモードが初期状態の DX_BLENDMODE_NOBLEND( ブレンドなし ) で DrawPrimitive2DToShader を実行していますので、このサンプルプログラムのままですと α値によるブレンド処理が行われません DrawPrimitive2DToShader の前に SetDrawBlendMode( DX_BLENDMODE_ALPHA, 0 ) ;を実行するなど ブレンドモードを「ブレンドなし」以外にしてみてください( 第二引数は無視されますが、 ブレンドモードの変更自体は行われます ) あと、-0.1 の時に消えたのは、DXライブラリ側でα値が 8( 0〜255表記 )以下の場合は 描画しないという「アルファテスト」の設定を Direct3DDevice にしているからです
Re: シェーダについて ( No.6 )
名前:愛煙家 日時:2011/02/25 21:52

お忙しいところご返答ありがとうございました。 ブレンドモードをなしにすると透過されるようになりました。 元の画像より白く表示させるという目的のためにシェーダを使おうとしてるのですが、 シェーダを使う以外方法は今のところないですよね?
Re: シェーダについて ( No.7 )
名前:管理人 日時:2011/03/05 01:50

今のところ無かったのですが、シェーダを使わない方法で使えそうな機能が Direct3D の固定機能パイプラインにもありましたので、ライブラリの機能に追加してみました よろしければこちらのバージョンをダウンロードしてください m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい) 追加したのは SetDrawBlendMode の第一引数に渡すブレンドモードで、 DX_BLENDMODE_ALPHA_X4 DX_BLENDMODE_ADD_X4 の二つです この二つはそれぞれαブレンド描画と加算ブレンド描画の 描画元の画像の輝度を4倍にして描画する、という以外は DX_BLENDMODE_ALPHA DX_BLENDMODE_ADD と同じです 例えば SetDrawBlendMode( DX_BLENDMODE_ALPHA_X4, 255 ) ; DrawGraph( 0, 0, GraphHandle, TRUE ) ; とすると、GraphHandle の画像の色の値が4倍になって描画されるので、より白に近くなります 因みに SetDrawBlendMode( DX_BLENDMODE_ALPHA_X4, 255 ) ; SetDrawBright( 64, 64, 64 ) ; DrawGraph( 0, 0, GraphHandle, TRUE ) ; という風に、SetDrawBright で描画輝度を最大( 255 )の4分の1に設定すると、 画像そのものの輝度( 1倍 )で描画されます この機能を使って8倍の輝度で描画する場合は、描画負荷は二倍になりますが SetDrawBlendMode( DX_BLENDMODE_ALPHA_X4, 255 ) ; DrawGraph( 0, 0, GraphHandle, TRUE ) ; SetDrawBlendMode( DX_BLENDMODE_ADD_X4, 255 ) ; DrawGraph( 0, 0, GraphHandle, TRUE ) ; という風に、不透明で4倍の輝度で描画したあと、加算ブレンドで 4倍の輝度で同じ画像を同じ座標に描画することで合わせて8倍になります これの実現に使用している Direct3D 固定機能パイプラインの機能は 古いGPUでは機能しないのですが、そのGPUが詰まれたノートPCが発売されたのが 2002年頃なので、流石にもう気にしなくても大丈夫だと思います・・・

Page: 1 |