2008-09-15 10 views

答えて

2

私はJavaをあまり使っていませんが、white paper from 1984に基づいて、レンダリング状態のブレンドモードをかなり簡単にマッピングする必要があります。

通常のアルファブレンディング(SourceAlpha、InvSourceAlpha)、またはいくつかの例を挙げてみましょう(1つ、1つ)のように、これ以上のことはもちろんありません。

はとにかく、これらは追加のBlendOperationを想定し、AlphaBlendEnableがあることを(私は...あなたには、いくつかの既存の機能を移植しているので、あなたがその原因ではあなたが他の組み合わせを気にしないかもしれません?特にこれらについて尋ねていると仮定します)本当。

クリア

SourceBlend = Zero 
DestinationBlend = Zero 

B上

SourceBlend = One 
DestinationBlend = Zero 

B

SourceBlend = Zero 
DestinationBlend = One 

A

SourceBlend = One 
DestinationBlend = InvSourceAlpha 

BにおけるB

SourceBlend = InvDestinationAlpha 
DestinationBlend = One 

オーバーA

0アウト

SourceBlend = Zero 
DestinationBlend = SourceAlpha 

AアウトB

SourceBlend = InvDestinationAlpha 
DestinationBlend = Zero 

Bにおける

SourceBlend = DestinationAlpha 
DestinationBlend = One 

B

A B頂上

SourceBlend = DestinationAlpha 
DestinationBlend = InvSourceAlpha 

B

SourceBlend = InvDestinationAlpha 
DestinationBlend = SourceAlpha 

のXOR Bの上、これらはもう少し複雑で、複数のパスまたは複数のテクスチャのいずれかを必要とする連鎖

SourceBlend = InvDestinationAlpha 
DestinationBlend = InvSourceAlpha 

シェーダーへの入力。

0

"A"のレンダリングステート(ソースピクセルの色/アルファをペイントし、デスティネーションピクセルの色/アルファを無視する)を実装すると、Direct3Dはソースにアルファゼロの値。ターゲット領域に透明度を塗りつぶす代わりに、ターゲット領域が変更されていないことがわかります。しかし、ソースアルファ値を1に変更すると、ターゲット領域が「実質的に」透明になります。これはアルファブレンディングレンダリング状態を無効にしても起こるので、これは実際にはDirect3Dのバグである最適化の試行であると推測します。

この状況を除いて、Coreyのレンダリング状態は正しいと思われます。ありがとう、コーリー!それは、(AlphaFunction =グレーターとReferenceAlpha = 0のようなものと一緒に)上にある場合

0

一つは、チェック

AlphaTestEnable = false 

で確認してくださいアルファテストがオフであることを確認するために、明確なピクセルは、にかかわらず、捨てることができAlphaBlendEnable設定。

1

"A in B"の場合、DestinationBlendを0にしないでください。

BにおけるA

SourceBlend = DestinationAlpha 
DestinationBlend = Zero