私は単純なカーレースゲームをコーディングしています。黒い透明なポリゴンを描画してシーンに影を追加しようとしているときに、奇妙な問題に陥っていることに気付きました。
水平面に影を描くと、遠くから見ると透けて見えます。
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);
しかし、何も変わりませんでした。
前もって感謝します