如何绘制全屏四边形并仍然可以看到它背后的对象

时间:2012-07-30 23:36:30

标签: opengl

我正在制作3D游戏。我的游戏中有对象。当一个敌人到达我的位置时,我希望我的屏幕在短时间内变红。我选择通过尝试在我的相机位置渲染全屏红色方块来做到这一点。这是我在渲染方法中的尝试。

     RenderQuadTerrain();   

    //Draw the skybox
    CreateSkyBox(vNewPos.x,  vNewPos.y,  vNewPos.z,3500,3000,3500);
    DrawCoins();

    CollisionTest(g_Camera.Position().x, g_Camera.Position().y, g_Camera.Position().z);
    DrawEnemy();
    DrawEnemy1();

    //Draw SecondaryObjects models
    DrawSecondaryObjects(); 

    //Apply lighting effects
    LightingEffects();
    escapeAttempt();
if(hitbyenemy==true){
    glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE); // additive blending
float blendFactor = 1.0;
glColor3f(blendFactor ,0,0); // when blendFactor = 0, the quad won't be visible. When    blendFactor=1, the scene will be bathed in redness

    glBegin(GL_QUADS);                      // Draw A Quad
    glVertex3f(-1.0f, 1.0f, 0.0f);              // Top Left
    glVertex3f( 1.0f, 1.0f, 0.0f);              // Top Right
    glVertex3f( 1.0f,-1.0f, 0.0f);              // Bottom Right
    glVertex3f(-1.0f,-1.0f, 0.0f);              // Bottom Left
glEnd();
}

然而,所有这一切都将我游戏中的所有物体变成透明色,而我无法在任何地方看到这个方块。我甚至不知道如何定位四边形。我对openGL很新。

我的游戏看起来如何不试图渲染四边形: enter image description here

我的游戏如何看待我的尝试: enter image description here

使用Kevin的代码和glDisable(GL_DEPTH_TEST); enter image description here

编辑:我已经将代码更改为以下粘贴...仍然看起来像图像。

http://pastebin.com/eiVFcQqM

1 个答案:

答案 0 :(得分:2)

对此问题有几种可能的贡献:

  • 您可能需要定期混合,而不是添加剂混合;添加剂混合不会使白色,黄色或紫色物体变红。将混合功能更改为glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);,并使用glColor4f(1, 0, 0, blendFactor);

  • 的颜色
  • 绘制叠加层时应glDisable(GL_DEPTH_TEST);,以防止被其他几何图形隐藏,然后重新启用它(或使用glPush/PopAttrib(GL_ENABLE_BIT))。

  • 投影和模型视图矩阵应该是标识,以确保具有这些坐标的四边形覆盖整个屏幕。 (但是,你可能已经隐含了,因为你说它影响了全屏,只是没有以正确的方式。)

如果这些建议没有解决,请编辑您的问题,显示您的游戏截图,无论是否有红色闪光,以便我们更好地了解问题。