BOOL GraphicsMisc::DrawGradient(GM_GRADIENT nType, CDC* pDC, LPCRECT pRect, COLORREF crFrom, COLORREF crTo, BOOL bHorz, int nBorder) { switch (nType) { case GMG_GRADIENT: DrawGradient(pDC, pRect, crFrom, crTo, bHorz, nBorder); return TRUE; case GMG_GLASS: DrawGlass(pDC, pRect, crFrom, crTo, bHorz, nBorder); return TRUE; case GMG_GLASSWITHGRADIENT: DrawGlassWithGradient(pDC, pRect, crFrom, crTo, bHorz, nBorder); return TRUE; } // all the rest ASSERT(0); return FALSE; }
// This function does any needed initialization on the rendering // context. void SetupRC() { GLint iWidth, iHeight,iComponents; GLenum eFormat; GLbyte *pBytes; GLfloat fAmbLight[] = { 0.1f, 0.1f, 0.1f, 0.0f }; GLfloat fDiffLight[] = { 1.0f, 1.0f, 1.0f, 0.0f }; GLfloat fSpecLight[] = { 0.5f, 0.5f, 0.5f, 0.0f }; GLfloat lightPos[] = { -100.0f, 100.0f, 100.0f, 1.0f }; GLfloat fScale = 0.01f; // Bluish background glClearColor(0.0f, 0.0f, .50f, 1.0f ); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); // Lit texture environment glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glGenTextures(2, textureObjects); // Load the body texture glBindTexture(GL_TEXTURE_2D, textureObjects[BODY_TEXTURE]); pBytes = gltLoadTGA("BODY.tga", &iWidth, &iHeight, &iComponents, &eFormat); glTexImage2D(GL_TEXTURE_2D, 0, iComponents, iWidth, iHeight, 0, eFormat, GL_UNSIGNED_BYTE, (void *)pBytes); free(pBytes); GLfloat fLargest; glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &fLargest); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, fLargest); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); glBindTexture(GL_TEXTURE_2D, textureObjects[GLASS_TEXTURE]); pBytes = gltLoadTGA("glass.tga", &iWidth, &iHeight, &iComponents, &eFormat); glTexImage2D(GL_TEXTURE_2D, 0, iComponents, iWidth, iHeight, 0, eFormat, GL_UNSIGNED_BYTE, (void *)pBytes); free(pBytes); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); glEnable(GL_TEXTURE_2D); // Set up lighting glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_COLOR_MATERIAL); glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); glMaterialfv(GL_FRONT, GL_SPECULAR, fDiffLight); glMateriali(GL_FRONT, GL_SHININESS, 128); glLightfv(GL_LIGHT0, GL_AMBIENT, fAmbLight); glLightfv(GL_LIGHT0, GL_DIFFUSE, fDiffLight); glLightfv(GL_LIGHT0, GL_SPECULAR, fSpecLight); glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SEPARATE_SPECULAR_COLOR); // Light never changes, put it here glLightfv(GL_LIGHT0, GL_POSITION, lightPos); glEnable(GL_RESCALE_NORMAL); bodyList = glGenLists(2); glassList = bodyList + 1; glNewList(bodyList, GL_COMPILE); DrawBody(); glEndList(); glNewList(glassList, GL_COMPILE); DrawGlass(); glEndList(); }