Win7环境使用VC2008进行OpenGL编程

2012-03-12 19:33:35|?次阅读|上传:wustguangh【已有?条评论】发表评论

关键词:C/C++, 图形/图像, MFC|来源:唯设编程网

5.2. OpenGl环境初始化相关函数

// 初始化OpenGl环境
void COpenGLLib::init(void)
{
	PIXELFORMATDESCRIPTOR pfd;
	int n;
	HGLRC hrc;	
	if(!initPixelformat())
		return;
	n=::GetPixelFormat(my_pDC->GetSafeHdc());
	::DescribePixelFormat(my_pDC->GetSafeHdc(),n,sizeof(pfd),&pfd);
	hrc=wglCreateContext(my_pDC->GetSafeHdc());
	wglMakeCurrent(my_pDC->GetSafeHdc(),hrc);	
	//定义线的宽度
	GLfloat fLineWidth[2];
	glGetFloatv(GL_LINE_WIDTH_RANGE,fLineWidth);
	//循环定义2个逐渐增大的线宽
	for(int i=0;i<2;i++)
		lWidth[i]=fLineWidth[0]*(i+2);
}
// 初始化定义像素格式
BOOL COpenGLLib::initPixelformat()
{
	static PIXELFORMATDESCRIPTOR pfd=
	{
		sizeof(PIXELFORMATDESCRIPTOR),
			1,
			PFD_DRAW_TO_WINDOW|
			PFD_SUPPORT_OPENGL|
			PFD_DOUBLEBUFFER,
			PFD_TYPE_RGBA,
			24,
			0,0,0,0,0,0,
			0,
			0,
			0,
			0,0,0,0,
			32,
			0,
			0,
			PFD_MAIN_PLANE,
			0,
			0,0,0
	};
	int pixelformat;

	if((pixelformat=ChoosePixelFormat(my_pDC->GetSafeHdc(),&pfd))==0)
	{
		MessageBox(NULL,_T("定义像素格式:ChoosePixelFormat failed!"),_T("错误"),0);
		return FALSE;
	}
	if(SetPixelFormat(my_pDC->GetSafeHdc(),pixelformat,&pfd)==FALSE)
	{
		MessageBox(NULL,_T("SetPixelFormat failed"),_T("错误"),0);
		return FALSE;
	}
	return TRUE;
}

本实例只对OpenGL的绘制环境进行了常规定义,首先调用initPixelformat函数对像素格式进行了定义,如果定义成功,则将定义的像素格式设置成当前使用的像素格式,否则弹出错误提示。在init函数中然后调用wglCreateContext(my_pDC->GetSafeHdc())创建一个渲染描述表,并调用wglMakeCurrent(my_pDC->GetSafeHdc(),hrc)将当前的渲染描述表设置成新创建的hrc变量,最后调用glGetFloatv(GL_LINE_WIDTH_RANGE,fLineWidth)函数获取设备支持的线宽,并用此值初始化线宽数组。至此,OpenGL绘图环境的初始化工作便完成了。

5.3. 定义重置画布大小的函数,以保证OpenGL在我们预设的区域中绘图。

// 重置画布大小
void COpenGLLib::resetCanvasSize(int cx,int cy){
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	GLdouble size=4.5f;
	//不会改变原来的比例
	GLfloat xScale=(GLfloat)cx/cy>1.0f?(GLfloat)cx/cy:1.0f;
	GLfloat yScale=(GLfloat)cy/cx>1.0f?(GLfloat)cy/cx:1.0f;
	glFrustum(-size*xScale,size*xScale,-size*yScale,size*yScale,4.0,10.0);		//定义空间范围
	//glFrustum(-size,size,-size,size,5.0,8.0);		//定义空间范围
	glViewport(0,0,cx,cy);
	//gluPerspective(45.0f,(GLfloat)cx/(GLfloat)cy,0.1f ,1000.0f);//投影变换和视口变换
	//第一个参数是视口角度,一般设为45 
	//第二个参数是视口宽高比,一般设为屏幕横纵比1048/768.0f 
	//第三、四个参数决定视点远近裁剪面,即能看到的最近与最远距离。一般分别设置为:0.1f,1000.0f
}
发表评论0条 】
网友评论(共?条评论)..
Win7环境使用VC2008进行OpenGL编程