2010-12-04 9 views
2

私はシンプルなカーレースゲームをコーディングしています。私のシーンに影を追加しようとしている間、黒い透明なポリゴンを描くことによって、私は奇妙な問題に悩まされていました。影が横面に描かれている透明なポリゴンは、下にあるサーフェスも透明にします。

私は遠くからそれらを見たとき、彼らは透明であるかのように、私は表面を通して見ることができます。私は別のshadow_offset影を投影する任意のオブジェクトに割り当て競合を避けると影に

glEnable(GL_POLYGON_OFFSET_FILL); 

//call to object.drawShadows() 

glDisable(GL_POLYGON_OFFSET_FILL); 

そして

void Object::drawShadows(){ 
glPolygonOffset(-1.0-shadow_offset,-1.0-shadow_offset); 
//Draw shadow 
} 

を描画する前に、この呼び出しを行う

void PolyShadow::Draw(){ 
glColor4f(0,0,0,0.5f); 
    glEnable (GL_BLEND); 
    glBlendFunc (GL_DST_COLOR,GL_ONE_MINUS_SRC_ALPHA); 

    this->drawShadow(); 
glDisable (GL_BLEND); 
    shadow_initialized = true; 
} 

私も

てみました
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

でも何も変わりません。あなたはブレンドを使用するときは、バックツーフロントレンダリングする必要があり、事前

答えて

1

感謝。したがって、モデルや三角形をzオーダーする必要があります。 通常は、最初にすべての不透明なものを任意の順序でレンダリングし、次にブレンドしたものをバックツーフロントでレンダリングします。

すべての影が同じ色を持っているので、あなたのために悪いことではありません。ジオメトリをレンダリングした後に影をレンダリングするだけです。
シャドウをレンダリングするには、他の方法がありますが、このような問題はありません(たとえば、marking the shadowed parts of the geometry in the stencil buffer)。

あり順序付けの問題を回避しても、幾何学的に交差するために働く複雑なアルファブレンドシーン(例えば「深剥離」)をレンダリングするためにいくつかのテクニックがありますが、それらはかなり高価です。

+0

ありがとうございます!私はそれに取り組んでいきます –

関連する問題