/// Draws a fog colored box which is wider at the top void pie_DrawFogBox(float left, float right, float front, float back, float height, float wider) { PIELIGHT fog_colour = pie_GetFogColour(); pie_SetTexturePage(TEXPAGE_NONE); glColor4ub(fog_colour.byte.r,fog_colour.byte.g,fog_colour.byte.b,0xFF); pie_SetRendMode(REND_OPAQUE); glPushAttrib(GL_DEPTH_BUFFER_BIT | GL_ENABLE_BIT | GL_FOG_BIT); // no use in updating the depth buffer glDepthMask(GL_FALSE); glDisable(GL_FOG); glBegin(GL_QUAD_STRIP); // Front glVertex3f(-left, 0, front); // bottom left glVertex3f(-left-wider, height, front+wider); // top left glVertex3f( right, 0, front); // bottom right glVertex3f( right+wider, height, front+wider); // top right // Right glVertex3f( right, 0,-back); // bottom r glVertex3f( right+wider, height,-back-wider); // top r // Back glVertex3f(-left, 0, -back); // bottom right glVertex3f(-left-wider, height, -back-wider); // top right // Left glVertex3f(-left, 0, front); // bottom r glVertex3f(-left-wider, height, front+wider); // top r glEnd(); glPopAttrib(); }
// // pie_SetFogStatus(bool val) // // Toggle fog on and off for rendering objects inside or outside the 3D world // void pie_SetFogStatus(bool val) { float fog_colour[4]; if (rendStates.fogEnabled) { //fog enabled so toggle if required if (rendStates.fog != val) { rendStates.fog = val; if (rendStates.fog) { PIELIGHT fog = pie_GetFogColour(); fog_colour[0] = fog.byte.r / 255.0f; fog_colour[1] = fog.byte.g / 255.0f; fog_colour[2] = fog.byte.b / 255.0f; fog_colour[3] = fog.byte.a / 255.0f; glFogi(GL_FOG_MODE, GL_LINEAR); glFogfv(GL_FOG_COLOR, fog_colour); glFogf(GL_FOG_DENSITY, 0.35f); glHint(GL_FOG_HINT, GL_DONT_CARE); glEnable(GL_FOG); } else { glDisable(GL_FOG); } } } else { //fog disabled so turn it off if not off already if (rendStates.fog != false) { rendStates.fog = false; } } }