www.pudn.com > Visual C++ CAD应用程序开发技术源代码ch3.rar > GLCODE.C


// glcode.c 
// Put/Port your OpenGL 'C' code here.  You can also include this 
// in the C++ source file, but this provides an easy way to isolate 
// existing code, or make for plug & play OpenGL samples. 
 
// Requisite headers 
#include  
#include  
#include  
#include  
#include "glcode.h" 
 
 
// Easier way to specify color for Windows bigots 
#define glRGB(x, y, z)	glColor3ub((GLubyte)x, (GLubyte)y, (GLubyte)z) 
 
 
// Lighting components 
GLfloat  ambientLight[] = { 0.2f, 0.2f, 0.2f, 1.0f }; 
GLfloat  diffuseLight[] = { 0.6f, 0.6f, 0.6f, 1.0f }; 
GLfloat  specular[] = { 1.0f, 1.0f, 1.0f, 1.0f}; 
GLfloat	 lightPos[] = { -60.0f, 25.0f, 50.0f, 1.0f }; 
 
 
 
////////////////////////////////////////////////////////////////// 
////////////////////////////////////////////////////////////////// 
// Do any initialization of the rendering context here, such as 
// setting background colors, setting up lighting, or performing 
// preliminary calculations. 
void GLSetupRC(void *pData) 
	{ 
	HDC hDC; 
	HFONT hFont; 
	GLYPHMETRICSFLOAT agmf[256]; // Throw away 
	LOGFONT logfont; 
 
	logfont.lfHeight = -10; 
	logfont.lfWidth = 0; 
	logfont.lfEscapement = 0; 
	logfont.lfOrientation = 0; 
	logfont.lfWeight = FW_BOLD; 
	logfont.lfItalic = FALSE; 
	logfont.lfUnderline = FALSE; 
	logfont.lfStrikeOut = FALSE; 
	logfont.lfCharSet = ANSI_CHARSET; 
	logfont.lfOutPrecision = OUT_DEFAULT_PRECIS; 
	logfont.lfClipPrecision = CLIP_DEFAULT_PRECIS; 
	logfont.lfQuality = DEFAULT_QUALITY; 
	logfont.lfPitchAndFamily = DEFAULT_PITCH; 
	strcpy(logfont.lfFaceName,"Arial"); 
 
 
 
	glEnable(GL_DEPTH_TEST);	// Hidden surface removal 
	glEnable(GL_COLOR_MATERIAL); 
 
	glClearColor(0.0f, 0.0f, 0.0f, 1.0f ); 
 
	glEnable(GL_LIGHTING); 
	glLightfv(GL_LIGHT0,GL_AMBIENT,ambientLight); 
	glLightfv(GL_LIGHT0,GL_DIFFUSE,diffuseLight); 
	glLightfv(GL_LIGHT0,GL_SPECULAR,specular); 
	glLightfv(GL_LIGHT0,GL_POSITION,lightPos); 
	glEnable(GL_LIGHT0); 
 
 
	glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); 
	glMaterialfv(GL_FRONT, GL_SPECULAR,specular); 
	glMateriali(GL_FRONT,GL_SHININESS,100); 
 
	// Blue 3D Text 
	glRGB(0, 0, 255); 
 
	hDC = (HDC)pData; 
	hFont = CreateFontIndirect(&logfont); 
	SelectObject (hDC, hFont);  
 
	 
	//create display lists for glyphs 0 through 255 with 0.1 extrusion  
	// and default deviation. The display list numbering starts at 1000  
	// (it could be any number).  
	wglUseFontOutlines(hDC, 0, 255, 1000, 0.0f, 0.3f,  
				WGL_FONT_POLYGONS, agmf);  
 
	DeleteObject(hFont); 
 	} 
 
 
 
////////////////////////////////////////////////////////////////// 
////////////////////////////////////////////////////////////////// 
// Called by Windows when it receives the WM_SIZE message. 
// Put any code needed here to recalc the viewing volume and 
// viewport info 
void GLResize(GLsizei w, GLsizei h) 
	{ 
	GLfloat nRange = 120.0f; 
 
	// Prevent a divide by zero 
	if(h == 0) 
		h = 1; 
 
	// Set Viewport to window dimensions 
    glViewport(0, 0, w, h); 
 
	glMatrixMode(GL_PROJECTION); 
 
	// Reset coordinate system 
	glLoadIdentity(); 
 
	// Establish clipping volume (left, right, bottom, top, near, far) 
    if (w <= h)  
		glOrtho (-nRange, nRange, -nRange*h/w, nRange*h/w, -nRange, nRange); 
    else  
		glOrtho (-nRange*w/h, nRange*w/h, -nRange, nRange, -nRange, nRange); 
 
	// Set up transformation to draw the string.  
	glTranslatef(-35.0f, 0.0f, -5.0f) ; 
	glScalef(60.0f, 60.0f, 60.0f);  
 
	glMatrixMode(GL_MODELVIEW); 
	} 
 
 
 
////////////////////////////////////////////////////////////////// 
////////////////////////////////////////////////////////////////// 
// Render your OpenGL Scene here. 
void GLRenderScene(void *pData) 
	{ 
	// Clear the window with current clearing color 
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
 
	// Rotate 
	glRotatef(3.0f,0.0f, 0.0f, 1.0f); // Rock Z 
	glRotatef(3.0f,1.0f, 0.0f, 0.0f); // Roll X 
 
	// Draw the string 
	glListBase(1000); 
	glPushMatrix(); 
	glCallLists (3, GL_UNSIGNED_BYTE, "MFC");  
	glPopMatrix(); 
 
	// Flush drawing commands 
	glFlush(); 
	}