トップページ > 記事閲覧
αチャンネルの二値化描画(完全透明、完全不透明)
名前:そめ 日時: 2021/05/22 16:07

お世話になっております テクスチャのαチャンネルが閾値を超えている部分のみ不透明として描画するような方法はありますか? 不透明ビルボードのテクスチャに中途半端なαチャンネルが残っている場合に閾値を128などに設定して手前の物体から描画しαブレンドの不整合を防ぎたいです よろしくお願いいたします
メンテ

Page: 1 |

Re: αチャンネルの二値化描画(完全透明、完全不透明) ( No.1 )
名前:へけぽん 日時:2021/05/22 19:43

そめさんの質問を解決してくれそうな関数を 管理人様から教えていただいた過去がありますので 該当部分を過去ログから抜粋して転載します DXライブラリでアルファテストを設定するには SetDrawAlphaTest を使用します // 描画時のアルファテストの設定を行う // TestMode : 比較モード( DX_CMP_GREATER等 -1でデフォルト動作に戻す ) // TestParam : 描画アルファ値との比較に使用する値( 0〜255 ) int SetDrawAlphaTest( int TestMode, int TestParam ) ; // 比較モード #define DX_CMP_NEVER (1) // 必ず描画しない( 何のためにあるんだろう… ) #define DX_CMP_LESS (2) // 描画元アルファ < TestParam の場合に描画 #define DX_CMP_EQUAL (3) // 描画元アルファ == TestParam の場合に描画 #define DX_CMP_LESSEQUAL (4) // 描画元アルファ <= TestParam の場合に描画 #define DX_CMP_GREATER (5) // 描画元アルファ > TestParam の場合に描画 #define DX_CMP_NOTEQUAL (6) // 描画元アルファ != TestParam の場合に描画 #define DX_CMP_GREATEREQUAL (7) // 描画元アルファ >= TestParam の場合に描画 #define DX_CMP_ALWAYS (8) // 必ず描画する( 何のためにあるんだろう… ) 例えば SetDrawAlphaTest( DX_CMP_GREATER, 128 ) ; を実行した場合は、描画する画像の アルファ値が 128 より大きい箇所のみ描画され、128 以下の箇所は描画されなくなります
メンテ
Re: αチャンネルの二値化描画(完全透明、完全不透明) ( No.2 )
名前:そめ 日時:2021/05/22 21:09

へけぽんさん 恐縮です できました ありがとうございます
メンテ
Re: αチャンネルの二値化描画(完全透明、完全不透明) ( No.3 )
名前:そめ 日時:2021/05/22 21:20

パっと見できてるように見えたのですが 128〜255の範囲でブレンドが起きて不整合を起こしますね (手前オブジェクト先描画と後描画で結果が微妙に変わる) この方法でやるなら254以外の数値は基本使えないかもですね
メンテ
Re: αチャンネルの二値化描画(完全透明、完全不透明) ( No.4 )
名前:管理人 日時:2021/06/06 04:16

> この方法でやるなら254以外の数値は基本使えないかもですね はい、アルファブレンドで正常な描画結果を得るには奥の物体から描画する必要があります
メンテ
Re: αチャンネルの二値化描画(完全透明、完全不透明) ( No.5 )
名前:そめ 日時:2021/06/06 05:43

今の所254指定で特に問題も起きていないのですが αテストを通過した画素をブレンド無しで出力することは出来ない感じでしょうか? DirectXでシンプルに実装すると ・ブレンド無し ・αテスト有り ・zテスト有り で想定の動きをするのですが、DXライブラリの場合DX_BLENDMODE_NOBLENDを指定しても必ずブレンドをするため同じようにならないです
メンテ

Page: 1 |

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

   クッキー保存