Я кодирую простую гоночную игру. При попытке добавить тени в мою сцену, нарисовав черные прозрачные полигоны, я обнаружил, что застрял в странной проблеме.Прозрачные многоугольники также делают прозрачные подстилающие поверхности
Когда тени рисуются на горизонтальных поверхностях, когда я смотрю на них издалека, я вижу сквозь поверхности, как если бы они были прозрачными.
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);
, но ничего не изменилось.
Заранее спасибо
Спасибо, много! Я буду работать над этим – 2010-12-05 18:21:35