我正在制作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很新。
我的游戏看起来如何不试图渲染四边形:
我的游戏如何看待我的尝试:
使用Kevin的代码和glDisable(GL_DEPTH_TEST)
;
编辑:我已经将代码更改为以下粘贴...仍然看起来像图像。
答案 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)
)。
投影和模型视图矩阵应该是标识,以确保具有这些坐标的四边形覆盖整个屏幕。 (但是,你可能已经隐含了,因为你说它影响了全屏,只是没有以正确的方式。)
如果这些建议没有解决,请编辑您的问题,显示您的游戏截图,无论是否有红色闪光,以便我们更好地了解问题。