   How do you fade out a scene?
  I was making a little opengl demo. I was wondering how to "fade out" a scene. How do you do that? 
  The simplest way is to simply blend a black quad over the scene and vary the alpha.  Alternatively you could change the colour each frame, so glColor3f(r, g, b) would become glColor3f(r * fade, g * fade, b * fade) where fade goes from 1 to 0.Enigma ;  glLightModel''s ambient parameter may help too   Love means nothing to a tennis playerMy nothing-to-write-home-about OpenGL webpage. (please pardon the popups!);  Just wondering...What if it is necessary not to fade out the scene, but vice versa. That it it becomes brighter, brighter, brighter... will, in this case, blending a white quad with increasing alpha do the job? (never tried this, so one solution is to try , but maybe anyone has better experience?) ;  Alpha doesn''t work for me...BTW, I''m not using lights yet... just trying to get the scene to fade...But the r*fade, g*fade, b*fade worked! Thanx! ;  @BrennendeKomet: Yeah, it will work. Just use glColor4f( r, g, b, alpha ). rgb is the color to fade to and change alpha slowly form 0 to 1. Blending mode should be set to (src_alpha, one_minus_src_alpha)@Big Cheez: you need the right blend mode for alpha to work.   [edited by - _DarkWIng_ on February 8, 2004 6:54:30 AM];  Ah. So it''s blending that you see whenever you see something semitransparent in OpenGL. So I''ll read the blending tutorial. Thanx! ;  Great. Just great. Blending doesn''t work! #include <windows.h>// Header File For Windows#include <math.h>// Header File For Windows Math Library#include <stdio.h>// Header File For Standard Input/Output#include <stdarg.h>// Header File For Variable Argument Routines#include <gl\gl.h>// Header File For The OpenGL32 Library#include <gl\glu.h>// Header File For The GLu32 Library#include <gl\glaux.h>// Header File For The Glaux Library#include <time.h>HDChDC=NULL;// Private GDI Device ContextHGLRChRC=NULL;// Permanent Rendering ContextHWNDhWnd=NULL;// Holds Our Window HandleHINSTANCEhInstance;// Holds The Instance Of The ApplicationGLfloatcnt1;// 1st Counter Used For ColoringGLfloatcnt2;// 2nd Counter Used For Coloringboolkeys[256];// Array Used For The Keyboard Routineboolactive=TRUE;// Window Active Flag Set To TRUE By Defaultboolfullscreen=TRUE;// Fullscreen Flag Set To Fullscreen Mode By Defaultfloat rot8=0.0;int scene=1;int cyclesElapsed=0;float fade=1.0;int i=0;//for for loopsfloat junk=0;//whatever we wantLRESULTCALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);// Declaration For WndProcGLvoid ReSizeGLScene(GLsizei width, GLsizei height)// Resize And Initialize The GL Window{if (height==0)// Prevent A Divide By Zero By{height=1;// Making Height Equal One}glViewport(0,0,width,height);// Reset The Current ViewportglMatrixMode(GL_PROJECTION);// Select The Projection MatrixglLoadIdentity();// Reset The Projection Matrix// Calculate The Aspect Ratio Of The WindowgluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);glMatrixMode(GL_MODELVIEW);// Select The Modelview MatrixglLoadIdentity();// Reset The Modelview Matrix}int InitGL(GLvoid)// All Setup For OpenGL Goes Here{glColor4f(1.0f,1.0f,1.0f,0.5f);glBlendFunc(GL_SRC_ALPHA,GL_ONE);glShadeModel(GL_SMOOTH);// Enable Smooth ShadingglClearColor(0.0f, 0.0f, 0.0f, 0.5f);// Black BackgroundglClearDepth(1.0f);// Depth Buffer SetupglEnable(GL_DEPTH_TEST);// Enables Depth TestingglDepthFunc(GL_LEQUAL);// The Type Of Depth Testing To DoglHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);// Really Nice Perspective Calculationsreturn TRUE;// Initialization Went OK}int DrawGLScene(GLvoid)// Here''s Where We Do All The Drawing{glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);// Clear Screen And Depth BufferglLoadIdentity();// Reset The Current Modelview MatrixcyclesElapsed+=1;glDisable(GL_BLEND);glEnable(GL_DEPTH_TEST);switch(scene){case 1:glEnable(GL_BLEND);glDisable(GL_DEPTH_TEST);glTranslatef(0,0,-6);glRotatef(rot8,1,1,1);rot8+=0.5;glBegin(GL_QUADS);glColor4f(0,0,1,0.5);//blueglVertex3f( 1.0f, 1.0f,-1.0f);// Top Right Of The Quad (Top)glVertex3f(-1.0f, 1.0f,-1.0f);// Top Left Of The Quad (Top)glVertex3f(-1.0f, 1.0f, 1.0f);// Bottom Left Of The Quad (Top)glVertex3f( 1.0f, 1.0f, 1.0f);// Bottom Right Of The Quad (Top)glVertex3f( 1.0f,-1.0f, 1.0f);// Top Right Of The Quad (Bottom)glVertex3f(-1.0f,-1.0f, 1.0f);// Top Left Of The Quad (Bottom)glVertex3f(-1.0f,-1.0f,-1.0f);// Bottom Left Of The Quad (Bottom)glVertex3f( 1.0f,-1.0f,-1.0f);// Bottom Right Of The Quad (Bottom)glVertex3f( 1.0f, 1.0f, 1.0f);// Top Right Of The Quad (Front)glVertex3f(-1.0f, 1.0f, 1.0f);// Top Left Of The Quad (Front)glVertex3f(-1.0f,-1.0f, 1.0f);// Bottom Left Of The Quad (Front)glVertex3f( 1.0f,-1.0f, 1.0f);// Bottom Right Of The Quad (Front)glVertex3f( 1.0f,-1.0f,-1.0f);// Bottom Left Of The Quad (Back)glVertex3f(-1.0f,-1.0f,-1.0f);// Bottom Right Of The Quad (Back)glVertex3f(-1.0f, 1.0f,-1.0f);// Top Right Of The Quad (Back)glVertex3f( 1.0f, 1.0f,-1.0f);// Top Left Of The Quad (Back)glVertex3f(-1.0f, 1.0f, 1.0f);// Top Right Of The Quad (Left)glVertex3f(-1.0f, 1.0f,-1.0f);// Top Left Of The Quad (Left)glVertex3f(-1.0f,-1.0f,-1.0f);// Bottom Left Of The Quad (Left)glVertex3f(-1.0f,-1.0f, 1.0f);// Bottom Right Of The Quad (Left)glVertex3f( 1.0f, 1.0f,-1.0f);// Top Right Of The Quad (Right)glVertex3f( 1.0f, 1.0f, 1.0f);// Top Left Of The Quad (Right)glVertex3f( 1.0f,-1.0f, 1.0f);// Bottom Left Of The Quad (Right)glVertex3f( 1.0f,-1.0f,-1.0f);// Bottom Right Of The Quad (Right)glEnd();if(cyclesElapsed>=2500){cyclesElapsed=0;scene+=1;}break;case 2:glEnable(GL_BLEND);glDisable(GL_DEPTH_TEST);glTranslatef(0,0,-6);glRotatef(rot8,1,1,1);rot8+=0.5;glBegin(GL_QUADS);glColor3f(1.0f*float(cos(cnt1)),1.0f*float(sin(cnt2)),1.0f-0.5f*float(cos(cnt1+cnt2)));//rainbowglVertex3f( 1.0f, 1.0f,-1.0f);// Top Right Of The Quad (Top)glVertex3f(-1.0f, 1.0f,-1.0f);// Top Left Of The Quad (Top)glVertex3f(-1.0f, 1.0f, 1.0f);// Bottom Left Of The Quad (Top)glVertex3f( 1.0f, 1.0f, 1.0f);// Bottom Right Of The Quad (Top)glVertex3f( 1.0f,-1.0f, 1.0f);// Top Right Of The Quad (Bottom)glVertex3f(-1.0f,-1.0f, 1.0f);// Top Left Of The Quad (Bottom)glVertex3f(-1.0f,-1.0f,-1.0f);// Bottom Left Of The Quad (Bottom)glVertex3f( 1.0f,-1.0f,-1.0f);// Bottom Right Of The Quad (Bottom)glVertex3f( 1.0f, 1.0f, 1.0f);// Top Right Of The Quad (Front)glVertex3f(-1.0f, 1.0f, 1.0f);// Top Left Of The Quad (Front)glVertex3f(-1.0f,-1.0f, 1.0f);// Bottom Left Of The Quad (Front)glVertex3f( 1.0f,-1.0f, 1.0f);// Bottom Right Of The Quad (Front)glVertex3f( 1.0f,-1.0f,-1.0f);// Bottom Left Of The Quad (Back)glVertex3f(-1.0f,-1.0f,-1.0f);// Bottom Right Of The Quad (Back)glVertex3f(-1.0f, 1.0f,-1.0f);// Top Right Of The Quad (Back)glVertex3f( 1.0f, 1.0f,-1.0f);// Top Left Of The Quad (Back)glVertex3f(-1.0f, 1.0f, 1.0f);// Top Right Of The Quad (Left)glVertex3f(-1.0f, 1.0f,-1.0f);// Top Left Of The Quad (Left)glVertex3f(-1.0f,-1.0f,-1.0f);// Bottom Left Of The Quad (Left)glVertex3f(-1.0f,-1.0f, 1.0f);// Bottom Right Of The Quad (Left)glVertex3f( 1.0f, 1.0f,-1.0f);// Top Right Of The Quad (Right)glVertex3f( 1.0f, 1.0f, 1.0f);// Top Left Of The Quad (Right)glVertex3f( 1.0f,-1.0f, 1.0f);// Bottom Left Of The Quad (Right)glVertex3f( 1.0f,-1.0f,-1.0f);// Bottom Right Of The Quad (Right)glEnd();cnt1+=0.007f;cnt2+=0.005f;if(cyclesElapsed>=2500){cyclesElapsed=0;scene+=1;}break;case 3:glEnable(GL_BLEND);glDisable(GL_DEPTH_TEST);if(fade>0){glTranslatef(0,0,-6);glRotatef(rot8,1,1,1);rot8+=0.5;glBegin(GL_QUADS);glColor3f(0,0,fade);//blueglVertex3f( 1.0f, 1.0f,-1.0f);// Top Right Of The Quad (Top)glVertex3f(-1.0f, 1.0f,-1.0f);// Top Left Of The Quad (Top)glVertex3f(-1.0f, 1.0f, 1.0f);// Bottom Left Of The Quad (Top)glVertex3f( 1.0f, 1.0f, 1.0f);// Bottom Right Of The Quad (Top)glVertex3f( 1.0f,-1.0f, 1.0f);// Top Right Of The Quad (Bottom)glVertex3f(-1.0f,-1.0f, 1.0f);// Top Left Of The Quad (Bottom)glVertex3f(-1.0f,-1.0f,-1.0f);// Bottom Left Of The Quad (Bottom)glVertex3f( 1.0f,-1.0f,-1.0f);// Bottom Right Of The Quad (Bottom)glVertex3f( 1.0f, 1.0f, 1.0f);// Top Right Of The Quad (Front)glVertex3f(-1.0f, 1.0f, 1.0f);// Top Left Of The Quad (Front)glVertex3f(-1.0f,-1.0f, 1.0f);// Bottom Left Of The Quad (Front)glVertex3f( 1.0f,-1.0f, 1.0f);// Bottom Right Of The Quad (Front)glVertex3f( 1.0f,-1.0f,-1.0f);// Bottom Left Of The Quad (Back)glVertex3f(-1.0f,-1.0f,-1.0f);// Bottom Right Of The Quad (Back)glVertex3f(-1.0f, 1.0f,-1.0f);// Top Right Of The Quad (Back)glVertex3f( 1.0f, 1.0f,-1.0f);// Top Left Of The Quad (Back)glVertex3f(-1.0f, 1.0f, 1.0f);// Top Right Of The Quad (Left)glVertex3f(-1.0f, 1.0f,-1.0f);// Top Left Of The Quad (Left)glVertex3f(-1.0f,-1.0f,-1.0f);// Bottom Left Of The Quad (Left)glVertex3f(-1.0f,-1.0f, 1.0f);// Bottom Right Of The Quad (Left)glVertex3f( 1.0f, 1.0f,-1.0f);// Top Right Of The Quad (Right)glVertex3f( 1.0f, 1.0f, 1.0f);// Top Left Of The Quad (Right)glVertex3f( 1.0f,-1.0f, 1.0f);// Bottom Left Of The Quad (Right)glVertex3f( 1.0f,-1.0f,-1.0f);// Bottom Right Of The Quad (Right)glEnd();fade-=0.004;}if(cyclesElapsed>=300){cyclesElapsed=0;scene+=1;}break;default:break;}return TRUE;// Everything Went OK}GLvoid KillGLWindow(GLvoid)// Properly Kill The Window{if (fullscreen)// Are We In Fullscreen Mode?{ChangeDisplaySettings(NULL,0);// If So Switch Back To The DesktopShowCursor(TRUE);// Show Mouse Pointer}if (hRC)// Do We Have A Rendering Context?{if (!wglMakeCurrent(NULL,NULL))// Are We Able To Release The DC And RC Contexts?{MessageBox(NULL,"Release Of DC And RC Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);}if (!wglDeleteContext(hRC))// Are We Able To Delete The RC?{MessageBox(NULL,"Release Rendering Context Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);}hRC=NULL;// Set RC To NULL}if (hDC && !ReleaseDC(hWnd,hDC))// Are We Able To Release The DC{MessageBox(NULL,"Release Device Context Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);hDC=NULL;// Set DC To NULL}if (hWnd && !DestroyWindow(hWnd))// Are We Able To Destroy The Window?{MessageBox(NULL,"Could Not Release hWnd.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);hWnd=NULL;// Set hWnd To NULL}if (!UnregisterClass("OpenGL",hInstance))// Are We Able To Unregister Class{MessageBox(NULL,"Could Not Unregister Class.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);hInstance=NULL;// Set hInstance To NULL}} BOOL CreateGLWindow(char* title, int width, int height, int bits, bool fullscreenflag){GLuintPixelFormat;// Holds The Results After Searching For A MatchWNDCLASSwc;// Windows Class StructureDWORDdwExStyle;// Window Extended StyleDWORDdwStyle;// Window StyleRECTWindowRect;// Grabs Rectangle Upper Left / Lower Right ValuesWindowRect.left=(long)0;// Set Left Value To 0WindowRect.right=(long)width;// Set Right Value To Requested WidthWindowRect.top=(long)0;// Set Top Value To 0WindowRect.bottom=(long)height;// Set Bottom Value To Requested Heightfullscreen=fullscreenflag;// Set The Global Fullscreen FlaghInstance= GetModuleHandle(NULL);// Grab An Instance For Our Windowwc.style= CS_HREDRAW | CS_VREDRAW | CS_OWNDC;// Redraw On Size, And Own DC For Window.wc.lpfnWndProc= (WNDPROC) WndProc;// WndProc Handles Messageswc.cbClsExtra= 0;// No Extra Window Datawc.cbWndExtra= 0;// No Extra Window Datawc.hInstance= hInstance;// Set The Instancewc.hIcon= LoadIcon(NULL, IDI_WINLOGO);// Load The Default Iconwc.hCursor= LoadCursor(NULL, IDC_ARROW);// Load The Arrow Pointerwc.hbrBackground= NULL;// No Background Required For GLwc.lpszMenuName= NULL;// We Don''t Want A Menuwc.lpszClassName= "OpenGL";// Set The Class Nameif (!RegisterClass(&wc))// Attempt To Register The Window Class{MessageBox(NULL,"Failed To Register The Window Class.","ERROR",MB_OK|MB_ICONEXCLAMATION);return FALSE;// Return FALSE}if (fullscreen)// Attempt Fullscreen Mode?{DEVMODE dmScreenSettings;// Device Modememset(&dmScreenSettings,0,sizeof(dmScreenSettings));// Makes Sure Memory''s CleareddmScreenSettings.dmSize=sizeof(dmScreenSettings);// Size Of The Devmode StructuredmScreenSettings.dmPelsWidth= width;// Selected Screen WidthdmScreenSettings.dmPelsHeight= height;// Selected Screen HeightdmScreenSettings.dmBitsPerPel= bits;// Selected Bits Per PixeldmScreenSettings.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;// Try To Set Selected Mode And Get Results.  NOTE: CDS_FULLSCREEN Gets Rid Of Start Bar.if (ChangeDisplaySettings(&dmScreenSettings,CDS_FULLSCREEN)!=DISP_CHANGE_SUCCESSFUL){// If The Mode Fails, Offer Two Options.  Quit Or Use Windowed Mode.if (MessageBox(NULL,"The Requested Fullscreen Mode Is Not Supported By\nYour Video Card. Use Windowed Mode Instead?","NeHe GL",MB_YESNO|MB_ICONEXCLAMATION)==IDYES){fullscreen=FALSE;// Windowed Mode Selected.  Fullscreen = FALSE}else{// Pop Up A Message Box Letting User Know The Program Is Closing.MessageBox(NULL,"Program Will Now Close.","ERROR",MB_OK|MB_ICONSTOP);return FALSE;// Return FALSE}}}if (fullscreen)// Are We Still In Fullscreen Mode?{dwExStyle=WS_EX_APPWINDOW;// Window Extended StyledwStyle=WS_POPUP;// Windows StyleShowCursor(FALSE);// Hide Mouse Pointer}else{dwExStyle=WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;// Window Extended StyledwStyle=WS_OVERLAPPEDWINDOW;// Windows Style}AdjustWindowRectEx(&WindowRect, dwStyle, FALSE, dwExStyle);// Adjust Window To True Requested Size// Create The Windowif (!(hWnd=CreateWindowEx(dwExStyle,// Extended Style For The Window"OpenGL",// Class Nametitle,// Window TitledwStyle |// Defined Window StyleWS_CLIPSIBLINGS |// Required Window StyleWS_CLIPCHILDREN,// Required Window Style0, 0,// Window PositionWindowRect.right-WindowRect.left,// Calculate Window WidthWindowRect.bottom-WindowRect.top,// Calculate Window HeightNULL,// No Parent WindowNULL,// No MenuhInstance,// InstanceNULL)))// Dont Pass Anything To WM_CREATE{KillGLWindow();// Reset The DisplayMessageBox(NULL,"Window Creation Error.","ERROR",MB_OK|MB_ICONEXCLAMATION);return FALSE;// Return FALSE}staticPIXELFORMATDESCRIPTOR pfd=// pfd Tells Windows How We Want Things To Be{sizeof(PIXELFORMATDESCRIPTOR),// Size Of This Pixel Format Descriptor1,// Version NumberPFD_DRAW_TO_WINDOW |// Format Must Support WindowPFD_SUPPORT_OPENGL |// Format Must Support OpenGLPFD_DOUBLEBUFFER,// Must Support Double BufferingPFD_TYPE_RGBA,// Request An RGBA Formatbits,// Select Our Color Depth0, 0, 0, 0, 0, 0,// Color Bits Ignored0,// No Alpha Buffer0,// Shift Bit Ignored0,// No Accumulation Buffer0, 0, 0, 0,// Accumulation Bits Ignored16,// 16Bit Z-Buffer (Depth Buffer)  0,// No Stencil Buffer0,// No Auxiliary BufferPFD_MAIN_PLANE,// Main Drawing Layer0,// Reserved0, 0, 0// Layer Masks Ignored};if (!(hDC=GetDC(hWnd)))// Did We Get A Device Context?{KillGLWindow();// Reset The DisplayMessageBox(NULL,"Can''t Create A GL Device Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);return FALSE;// Return FALSE}if (!(PixelFormat=ChoosePixelFormat(hDC,&pfd)))// Did Windows Find A Matching Pixel Format?{KillGLWindow();// Reset The DisplayMessageBox(NULL,"Can''t Find A Suitable PixelFormat.","ERROR",MB_OK|MB_ICONEXCLAMATION);return FALSE;// Return FALSE}if(!SetPixelFormat(hDC,PixelFormat,&pfd))// Are We Able To Set The Pixel Format?{KillGLWindow();// Reset The DisplayMessageBox(NULL,"Can''t Set The PixelFormat.","ERROR",MB_OK|MB_ICONEXCLAMATION);return FALSE;// Return FALSE}if (!(hRC=wglCreateContext(hDC)))// Are We Able To Get A Rendering Context?{KillGLWindow();// Reset The DisplayMessageBox(NULL,"Can''t Create A GL Rendering Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);return FALSE;// Return FALSE}if(!wglMakeCurrent(hDC,hRC))// Try To Activate The Rendering Context{KillGLWindow();// Reset The DisplayMessageBox(NULL,"Can''t Activate The GL Rendering Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);return FALSE;// Return FALSE}ShowWindow(hWnd,SW_SHOW);// Show The WindowSetForegroundWindow(hWnd);// Slightly Higher PrioritySetFocus(hWnd);// Sets Keyboard Focus To The WindowReSizeGLScene(width, height);// Set Up Our Perspective GL Screenif (!InitGL())// Initialize Our Newly Created GL Window{KillGLWindow();// Reset The DisplayMessageBox(NULL,"Initialization Failed.","ERROR",MB_OK|MB_ICONEXCLAMATION);return FALSE;// Return FALSE}return TRUE;// Success}LRESULT CALLBACK WndProc(HWNDhWnd,// Handle For This WindowUINTuMsg,// Message For This WindowWPARAMwParam,// Additional Message InformationLPARAMlParam)// Additional Message Information{switch (uMsg)// Check For Windows Messages{case WM_ACTIVATE:// Watch For Window Activate Message{if (!HIWORD(wParam))// Check Minimization State{active=TRUE;// Program Is Active}else{active=FALSE;// Program Is No Longer Active}return 0;// Return To The Message Loop}case WM_SYSCOMMAND:// Intercept System Commands{switch (wParam)// Check System Calls{case SC_SCREENSAVE:// Screensaver Trying To Start?case SC_MONITORPOWER:// Monitor Trying To Enter Powersave?return 0;// Prevent From Happening}break;// Exit}case WM_CLOSE:// Did We Receive A Close Message?{PostQuitMessage(0);// Send A Quit Messagereturn 0;// Jump Back}case WM_KEYDOWN:// Is A Key Being Held Down?{keys[wParam] = TRUE;// If So, Mark It As TRUEreturn 0;// Jump Back}case WM_KEYUP:// Has A Key Been Released?{keys[wParam] = FALSE;// If So, Mark It As FALSEreturn 0;// Jump Back}case WM_SIZE:// Resize The OpenGL Window{ReSizeGLScene(LOWORD(lParam),HIWORD(lParam));  // LoWord=Width, HiWord=Heightreturn 0;// Jump Back}}// Pass All Unhandled Messages To DefWindowProcreturn DefWindowProc(hWnd,uMsg,wParam,lParam);}int WINAPI WinMain(HINSTANCEhInstance,// InstanceHINSTANCEhPrevInstance,// Previous InstanceLPSTRlpCmdLine,// Command Line ParametersintnCmdShow)// Window Show State{MSGmsg;// Windows Message StructureBOOLdone=FALSE;// Bool Variable To Exit Loop// Create Our OpenGL Windowif (!CreateGLWindow("Demo",1024,768,32,fullscreen)){return 0;// Quit If Window Was Not Created}while(!done)// Loop That Runs While done=FALSE{if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))// Is There A Message Waiting?{if (msg.message==WM_QUIT)// Have We Received A Quit Message?{//done=TRUE;// If So done=TRUE}else// If Not, Deal With Window Messages{TranslateMessage(&msg);// Translate The MessageDispatchMessage(&msg);// Dispatch The Message}}else// If There Are No Messages{// Draw The Scene.  Watch For ESC Key And Quit Messages From DrawGLScene()if (active)// Program Active?{if (keys[VK_ESCAPE])// Was ESC Pressed?{done=TRUE;// ESC Signalled A Quit}else// Not Time To Quit, Update Screen{DrawGLScene();// Draw The SceneSwapBuffers(hDC);// Swap Buffers (Double Buffering)}}}}// ShutdownKillGLWindow();// Kill The Windowreturn (msg.wParam);// Exit The Program};  To enable blending, you must set the alpha value which you can only set when using glColor4x(r,g,b,a); where a is the alpha value (used for blending, mostly as transparancy). ;  That''s what I did, still didn''t work! 