//Includes and Define's: #include "main.h" //Globals: extern BOOL g_bKeys[256]; extern HDC g_hdc; UINT g_uTexture; FLOAT g_fRotation = 0.0f; FLOAT g_fAlpha = 1.0f; UINT g_uFont; //Functions: void Initialize(){ HFONT font, oldfont; //Set OpenGL options glClearColor(0.0f, 0.0f, 0.0f, 0.5f); glClearDepth(1.0f); glDepthFunc(GL_LEQUAL); glEnable(GL_DEPTH_TEST); glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); glShadeModel(GL_SMOOTH); glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); //Load texture #ifdef _DEBUG g_uTexture = LoadTextureRAW("C:\\Documents and Settings\\cesar\\Mijn documenten\\Visual Studio 2005\\Projects\\OpenGL Template\\release\\texture.raw", 256, 256); #else g_uTexture = LoadTextureRAW("texture.raw", 256, 256); #endif //Load a font g_uFont = glGenLists(96); font = CreateFont(-12, 0, 0, 0, FW_DONTCARE, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, ANTIALIASED_QUALITY, FF_DONTCARE|DEFAULT_PITCH, "Arial"); oldfont = (HFONT)SelectObject(g_hdc, font); wglUseFontBitmaps(g_hdc, 32, 96, g_uFont); SelectObject(g_hdc, oldfont); DeleteObject(font); //Create a timer timer_Set(1, 30, &RotateQuadOfDoom); trace("Initialized"); } void Deinitialize(){ //Delete font glDeleteLists(g_uFont, 96); //Delete texture glDeleteTextures(1, &g_uTexture); trace("Deinitialized"); } void Render(){ glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //text! glLoadIdentity(); glTranslatef(0.0f,0.0f,-1.0f); glColor3f(0.0f, 1.0f, 0.0f); //when i change it to anything other than 0.0f, 1.0f, 0.0f, it shows black text glRasterPos2f(0.2f, 0.0f); DisplayText(10, 10, g_uFont, "Hello World! %.f degrees!", g_fRotation); glLoadIdentity(); glTranslatef(0.0f, 0.0f, -4.0f); glRotatef(g_fRotation, 0.0f, 1.0f, 0.0f); //Blend! glColor4f(1.0f, 1.0f, 1.0f, g_fAlpha); glBlendFunc(GL_SRC_ALPHA,GL_ONE); //Quad with texture: glBindTexture(GL_TEXTURE_2D, g_uTexture); glBegin(GL_QUADS); if(g_fRotation <= 90 || g_fRotation >= 270){ glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 0.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f(1.0f, -1.0f, 0.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f(1.0f, 1.0f, 0.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 0.0f); }else{ glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 0.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f(1.0f, -1.0f, 0.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f(1.0f, 1.0f, 0.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 0.0f); } glEnd(); } void KeyDown(UINT key){ } void KeyUp(UINT key){ switch(key){ case VK_ESCAPE: PostQuitMessage(0); break; case 'T': if(glIsEnabled(GL_TEXTURE_2D)){ glDisable(GL_TEXTURE_2D); trace("Disabled textures"); }else{ glEnable(GL_TEXTURE_2D); trace("Enabled textures"); } break; case 222: trace("console!"); break; case VK_UP: g_fAlpha += 0.05f; if(g_fAlpha > 1.0f){ g_fAlpha = 1.0f; } trace("Set alpha: %d%", (INT)(g_fAlpha*101)); break; case VK_DOWN: g_fAlpha -= 0.05f; if(g_fAlpha < 0.0f){ g_fAlpha = 0.0f; } trace("Set alpha: %d%", (INT)(g_fAlpha*101)); break; } } void RotateQuadOfDoom(UINT id){ if(!g_bKeys[VK_SPACE]){ if(g_fRotation >= 360){ g_fRotation = 0; }else{ g_fRotation += 1; } } } void DisplayText(INT x, INT y, UINT font, LPSTR pszFormat, ...){ LPSTR pszText; va_list args; INT iSize; va_start(args, pszFormat); iSize = _vscprintf(pszFormat, args) + 3; pszText = (LPSTR)GlobalAlloc(GPTR, iSize); vsnprintf(pszText, iSize, pszFormat, args); va_end(args); glPushAttrib(GL_LIST_BIT); //glLoadIdentity(); //glTranslated(x, y, 1); glListBase(font - 32); glCallLists(strlen(pszText), GL_UNSIGNED_BYTE, pszText); glPopAttrib(); GlobalFree(pszText); }