2010-12-04 58 views
2

我正在編寫一個簡單的賽車遊戲。在嘗試在場景中添加陰影時,通過繪製黑色透明多邊形,我發現自己陷入了一個奇怪的問題。透明多邊形使底層表面透明

當在水平表面上繪製陰影時,當我從遠處看它們時,我可以看到表面,就好像它們是透明的。

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; 
} 

爲了避免衝突,我分配到投射陰影不同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 
} 

我也試圖與

之前撥打這通電話
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

但沒有改變。

在此先感謝

回答

1

當您使用混合,你需要渲染後端到前端。所以你需要對你的模型甚至三角形進行z排序。 通常,您首先以任意順序呈現所有不透明的東西,然後將東西背對背混合。

由於所有陰影都具有相同的顏色,對您而言並不是那麼糟糕。渲染幾何圖形後渲染陰影。
還有其他渲染陰影的方法,它們看起來更好,並且沒有此問題(例如marking the shadowed parts of the geometry in the stencil buffer)。

有一些技術可以渲染複雜的alpha混合場景(例如「Depth peeling」),它避免了排序問題,甚至可以用於相交幾何體,但它們相當昂貴。

+0

非常感謝!我會努力的 – 2010-12-05 18:21:35