【问题标题】:Transparent polygons make underlying surfaces transparent as well透明多边形使底层表面也透明
【发布时间】:2010-12-04 18:35:36
【问题描述】:

我正在编写一个简单的赛车游戏。在尝试通过绘制黑色透明多边形在场景中添加阴影时,我发现自己陷入了一个奇怪的问题。

当在水平表面上绘制阴影时,当我从远处看它们时,我可以透过表面看到它们,就好像它们是透明的一样。

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

但没有任何改变。

提前致谢

【问题讨论】:

    标签: c# opengl shadow


    【解决方案1】:

    当您使用混合时,您需要从后到前进行渲染。因此,您需要对模型甚至三角形进行 z 排序。 通常,您首先以任意顺序渲染所有不透明的东西,然后从后到前混合。

    由于所有阴影都具有相同的颜色,这对您来说不是那么糟糕。只需在渲染几何体后渲染阴影即可。
    还有其他渲染阴影的方法看起来更好并且没有这个问题(例如marking the shadowed parts of the geometry in the stencil buffer)。

    有一些技术可以渲染复杂的 alpha 混合场景(例如“深度剥离”),这些技术可以避免排序问题,甚至可以用于相交几何体,但它们相当昂贵。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-16
      • 2010-09-26
      • 1970-01-01
      • 1970-01-01
      • 2012-12-15
      相关资源
      最近更新 更多