MFC 中配置OpenGL环境

MFC为编写Windows应用程序提供了极大的方便,程序员在编写Windows应用程序时,只需要几步就可以把一个程序的框架建立起来.该类极大的提高了编程者的开发效率,是个具有极大实用价值的工具.


下面我们编写MFC 的OpenGL 应用程序.

要搭建一个OpenGL基本框架,需要以下几步:

1)新建一个单文档工程“OpenGLMFC”

(2)给工程添加三个库文件“GLAUX.LIB、GLU32.LIB、OpenGL32.LIB”,这三个库文件一般在“C:\Program Files\Microsoft Visual Studio\VC98\Lib\”路径中。

(3)在“stdafx.h”文件中添加包含三个OpenGL的头文件

                                   #include<gl\gl.h>

                                  #include <gl\glu.h>

                                 #include <gl\glaux.h>

(4)通过类向导给视图类添加三个消息响应函数:

      OnInitialUpdate(),OnCreate(),OnSize()。

(5)给视图类添加三个成员变量:



                  CClientDC  *m_pDC;

                   HGLRCm_hRC; // 专门用于OpenGL的数据类型

                   CRectm_rect;

(6)       OnCreate()函数中添加如下代码,其中重点是bSetupPixelFormat()函数,

{	if (CView::OnCreate(lpCreateStruct) == -1)
		return -1;
	m_pDC=new CClientDC(this);
	ASSERT(m_pDC!=NULL);
	if(!bSetupPixelFormat())
		return -1;
   <span style="white-space:pre">	</span>m_hRC=wglCreateContext(m_pDC->GetSafeHdc());
	wglMakeCurrent(m_pDC->GetSafeHdc(),m_hRC);
	return 0;  }

bSetupPixelFormat()函数用于设置OpenGL基本图元格式,需要自定义添加,代码如下:

{  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,
			16,
			0,
			0,
			PFD_MAIN_PLANE,
			0,
			0,0,0
			};
	 int pixelformat;
	 if((pixelformat=ChoosePixelFormat(m_pDC->GetSafeHdc(),&pfd))==0)
	 {
		 MessageBox("choose failed");
		 return FALSE;
	 }
	 if(SetPixelFormat(m_pDC->GetSafeHdc(),pixelformat,&pfd)==FALSE)
     {
		 MessageBox("set failed");
		 return FALSE;
	 }
	 return TRUE;  }

(7)在OnSize()函数中设置视口和场景大小。

{
	CView::OnSize(nType, cx, cy);
	
	wglMakeCurrent(m_pDC->GetSafeHdc(),m_hRC);
	glViewport(0,0,cx,cy);   //设置视口

	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluPerspective(60.0,1.0,1.0,500.0); //设置场景
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();	
	glTranslatef(0.0,0.0,-10.0);
	glRotatef(0.0,0.0,1.0,0.0);

	Invalidate(FALSE);
}

(8) 在OnInitialUpdate()函数中添加初始化光照、材质等特性的代码

{
	CView::OnInitialUpdate();
	
	// TODO: Add your specialized code here and/or call the base class
	wglMakeCurrent(m_pDC->GetSafeHdc(),m_hRC);

	float position0[]={-3.0,3.0,3.0,0.0};
	float local_view[]={0.0};

	float position1[]={-3.0f,-3.0f,-3.0f,0.0f};
	float light1_ambient[]={0.2f,0.2f,0.2f};
	float light1_diffuse[]={0.1f,0.2f,0.2f};

	float position2[]={-50.0f,100.0f,-300.0f,0.0f};
	float light2_ambient[]={0.2f,0.2f,0.2f};
	float light2_diffuse[]={0.1f,0.2f,0.2f};

	glLightfv(GL_LIGHT0,GL_POSITION,position0);
	glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER,local_view);

	glLightfv(GL_LIGHT1,GL_DIFFUSE,light1_diffuse);
        glLightfv(GL_LIGHT1,GL_AMBIENT,light1_ambient);
	glLightfv(GL_LIGHT1,GL_POSITION,position1);
	glLightfv(GL_LIGHT2,GL_DIFFUSE,light2_diffuse);
        glLightfv(GL_LIGHT2,GL_AMBIENT,light2_ambient);
	glLightfv(GL_LIGHT2,GL_POSITION,position2);
		
	glEnable(GL_LIGHTING);
	glEnable(GL_LIGHT0);
	glEnable(GL_LIGHT1);
	glEnable(GL_LIGHT2);
	glEnable(GL_AUTO_NORMAL);
	glEnable(GL_NORMALIZE);

	GetClientRect(&m_rect);
	glClearColor(0.0,1.0,1.0,1.0);
	glClearDepth(1.0f);
        glEnable(GL_DEPTH_TEST);
        glHint(GL_LINE_SMOOTH_HINT,GL_DONT_CARE);
	glEnable(GL_BLEND);
        glEnable(GL_LINE_SMOOTH);

	wglMakeCurrent(NULL,NULL);
}

(9) 在OnDraw()函数中添加代码如下:


 

 

        wglMakeCurrent(m_pDC->GetSafeHdc(),m_hRC);
         glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
 
         auxSolidBox(1.6,0.6,0.4);
         glTranslatef(0.0,3.0,0.0);
         auxSolidBox(0.6,0.6,0.4);
 
         glFlush();
         SwapBuffers(wglGetCurrentDC());

 

我们用自己构造的来绘制个简单的图形





  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在VS2019使用CMake编译MFCOpenGL,你需要按照以下步骤进行配置: 1. 首先,在项目的属性,将项目类型更改为静态库(.lib)或动态链接库(.dll)。这取决于你的需要。 2. 接下来,确保你在项目的头文件添加了必要的OpenGL头文件引用。这可以通过包含以下代码来完成: ```cpp #include <GL/gl.h> #include <GL/glu.h> ``` 3. 然后,将OpenGL的库文件链接到你的项目。这可以通过在项目的属性添加附加库目录和附加依赖项来完成。附加库目录应指向包含OpenGL库文件的目录(.lib文件)。附加依赖项应包含OpenGL库的名称。 4. 接下来是CMake的配置。首先,在项目的根目录下创建一个CMakeLists.txt文件。在该文件,添加以下内容: ```cmake cmake_minimum_required(VERSION 3.0) project(YourProjectName) find_package(OpenGL REQUIRED) add_executable(YourProjectName YourSourceFiles.cpp) target_link_libraries(YourProjectName OpenGL::GL) ``` 5. 然后,使用CMake来生成你的项目。在命令行导航到项目根目录,并运行以下命令: ``` cmake . ``` 6. 最后,使用VS2019打开生成的解决方案文件(.sln),并进行编译。 通过按照以上步骤进行配置,你将能够在VS2019使用CMake编译MFCOpenGL。请注意,这只是一个基本的配置示例,具体的配置可能因你的项目结构和需求而有所不同。你可能需要根据你的实际情况进行调整和修改。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [VS2019+OpenGL配置:绘制3维图](https://blog.csdn.net/qq_41498261/article/details/109331819)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值