图形学第三课openglnehemfc.docx
- 文档编号:30343927
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:10
- 大小:145.43KB
图形学第三课openglnehemfc.docx
《图形学第三课openglnehemfc.docx》由会员分享,可在线阅读,更多相关《图形学第三课openglnehemfc.docx(10页珍藏版)》请在冰豆网上搜索。
图形学第三课openglnehemfc
三图形学第三课MFC+opengl+nehe
1在vc6中,点击File--》new-》project
选单文档,点击完成
2点击工程--》设置,加入下面三个库
opengl32.libglu32.libglaux.lib
点击确定。
3在stdafx.h中加入
#include"gl\gl.h"
#include"gl\glu.h"
#include"gl\glaux.h"
见下图:
4点击查看--》建立类向导,出现classWizard界面,在视图类中加入五个消息映射函数:
加入后,打开mfcnehe1View.h,可以看到加入的五个消息函数:
同时在视图头文件中加入:
protected:
HGLRCm_hRC;
HDCm_hDC;
public:
voidDrawGLScene();
BOOLInitGL();
见下图
5在mfcneheview.cpp中
1)在OnCreate函数中加入
if(CView:
:
OnCreate(lpCreateStruct)==-1)
return-1;
//TODO:
Addyourspecializedcreationcodehere
PIXELFORMATDESCRIPTORpfd={
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
};
m_hDC=GetDC()->GetSafeHdc();
intsetPixelFormat=:
:
ChoosePixelFormat(m_hDC,&pfd);
:
:
SetPixelFormat(m_hDC,setPixelFormat,&pfd);
m_hRC=:
:
wglCreateContext(m_hDC);
:
:
wglMakeCurrent(m_hDC,m_hRC);
InitGL();
SetTimer(1,1,NULL);
return0;
2)在OnDestroy函数中加入
:
:
wglMakeCurrent(NULL,NULL);
:
:
wglDeleteContext(m_hRC);
3)在OnEraseBkgnd函数中修改为
returntrue;
4)在OnSize函数中加入
if(cy==0)cy=1;
glViewport(0,0,cx,cy);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
//计算窗口的外观比例
gluPerspective(45.0f,(GLfloat)cx/(GLfloat)cy,0.1f,100.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
5)在OnTimer函数
6)再加入几个辅助函数
InitGL函数中加入
glShadeModel(GL_SMOOTH);
glClearColor(0.0f,0.0f,0.0f,0.0f);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);
returnTRUE;
在DrawScene函数中加入
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
SwapBuffers(m_hDC);
7在OnDraw函数中加入
DrawGLScene();
7编译运行,显示
这是nehe课程中的第一课,显示一个没有绘制任何下图的opengl窗口。
二运行nehe的向3d进军的代码,显示旋转的金字塔和立方体
我们直接在上面的工程mfcnehe1中加入代码:
1在mfcneheview.h中加入用于旋转的成员变量
GLfloatrtri;//用于三角形的角度
GLfloatrquad;//用于四边形的角度
2在mfcneheview.cpp中加入
1)在构造函数中加入变量的初始化代码
CMfcnehe1View:
:
CMfcnehe1View():
rtri(0),rquad(0)
2)在OnTimer函数中加入
rtri+=1.0f;//增加金字塔的旋转变量(新增)
rquad-=0.5f;//减少立方体的旋转变量(新增)
Invalidate();//触发OnDraw函数
3)在OnSize函数中
4)在DrawScene函数中加入
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
//////////////////////////////////////////////////////////////////////
//gluLookAt(0,0,2,0,0,0,0,1,0);//设置视点与目标点
glTranslatef(-1.5f,0.0f,-6.0f);//左移1.5单位,并移入屏幕6.0
glRotatef(rtri,0.0f,1.0f,0.0f);//绕Y轴旋转金字塔
glBegin(GL_TRIANGLES);//开始绘制金字塔的各个面
glColor3f(1.0f,0.0f,0.0f);//红色
glVertex3f(0.0f,1.0f,0.0f);//三角形的上顶点(前侧面)
glColor3f(0.0f,1.0f,0.0f);//绿色
glVertex3f(-1.0f,-1.0f,1.0f);//三角形的左下顶点(前侧面)
glColor3f(0.0f,0.0f,1.0f);//蓝色
glVertex3f(1.0f,-1.0f,1.0f);//三角形的右下顶点(前侧面)
glColor3f(1.0f,0.0f,0.0f);//红色
glVertex3f(0.0f,1.0f,0.0f);//三角形的上顶点(右侧面)
glColor3f(0.0f,0.0f,1.0f);//蓝色
glVertex3f(1.0f,-1.0f,1.0f);//三角形的左下顶点(右侧面)
glColor3f(0.0f,1.0f,0.0f);//绿色
glVertex3f(1.0f,-1.0f,-1.0f);//三角形的右下顶点(右侧面)
glColor3f(1.0f,0.0f,0.0f);//红色
glVertex3f(0.0f,1.0f,0.0f);//三角形的上顶点(后侧面)
glColor3f(0.0f,1.0f,0.0f);//绿色
glVertex3f(1.0f,-1.0f,-1.0f);//三角形的左下顶点(后侧面)
glColor3f(0.0f,0.0f,1.0f);//蓝色
glVertex3f(-1.0f,-1.0f,-1.0f);//三角形的右下顶点(后侧面)
glColor3f(1.0f,0.0f,0.0f);//红色
glVertex3f(0.0f,1.0f,0.0f);//三角形的上顶点(左侧面)
glColor3f(0.0f,0.0f,1.0f);//蓝色
glVertex3f(-1.0f,-1.0f,-1.0f);//三角形的左下顶点(左侧面)
glColor3f(0.0f,1.0f,0.0f);//绿色
glVertex3f(-1.0f,-1.0f,1.0f);//三角形的右下顶点(左侧面)
glEnd();//file:
//金字塔绘制结束
glLoadIdentity();
glTranslatef(1.5f,0.0f,-7.0f);//先右移再移入屏幕
glRotatef(rquad,1.0f,1.0f,1.0f);//在XYZ轴上旋转立方体
glBegin(GL_QUADS);//开始绘制立方体
glColor3f(0.0f,1.0f,0.0f);//颜色改为蓝色
glVertex3f(1.0f,1.0f,-1.0f);//四边形的右上顶点(顶面)
glVertex3f(-1.0f,1.0f,-1.0f);//四边形的左上顶点(顶面)
glVertex3f(-1.0f,1.0f,1.0f);//四边形的左下顶点(顶面)
glVertex3f(1.0f,1.0f,1.0f);//四边形的右下顶点(顶面)
glColor3f(1.0f,0.5f,0.0f);//颜色改成橙色
glVertex3f(1.0f,-1.0f,1.0f);//四边形的右上顶点(底面)
glVertex3f(-1.0f,-1.0f,1.0f);//四边形的左上顶点(底面)
glVertex3f(-1.0f,-1.0f,-1.0f);//四边形的左下顶点(底面)
glVertex3f(1.0f,-1.0f,-1.0f);//四边形的右下顶点(底面)
glColor3f(1.0f,0.0f,0.0f);//颜色改成红色
glVertex3f(1.0f,1.0f,1.0f);//四边形的右上顶点(前面)
glVertex3f(-1.0f,1.0f,1.0f);//四边形的左上顶点(前面)
glVertex3f(-1.0f,-1.0f,1.0f);//四边形的左下顶点(前面)
glVertex3f(1.0f,-1.0f,1.0f);//四边形的右下顶点(前面)
glColor3f(1.0f,1.0f,0.0f);//颜色改成黄色
glVertex3f(1.0f,-1.0f,-1.0f);//四边形的右上顶点(后面)
glVertex3f(-1.0f,-1.0f,-1.0f);//四边形的左上顶点(后面)
glVertex3f(-1.0f,1.0f,-1.0f);//四边形的左下顶点(后面)
glVertex3f(1.0f,1.0f,-1.0f);//四边形的右下顶点(后面)
glColor3f(0.0f,0.0f,1.0f);//颜色改成蓝色
glVertex3f(-1.0f,1.0f,1.0f);//四边形的右上顶点(左面)
glVertex3f(-1.0f,1.0f,-1.0f);//四边形的左上顶点(左面
glVertex3f(-1.0f,-1.0f,-1.0f);//四边形的左下顶点(左面)
glVertex3f(-1.0f,-1.0f,1.0f);//四边形的右下顶点(左面)
glColor3f(1.0f,0.0f,1.0f);//颜色改成紫罗兰色
glVertex3f(1.0f,1.0f,-1.0f);//四边形的右上顶点(右面)
glVertex3f(1.0f,1.0f,1.0f);//四边形的左上顶点(右面)
glVertex3f(1.0f,-1.0f,1.0f);//四边形的左下顶点(右面)
glVertex3f(1.0f,-1.0f,-1.0f);//四边形的右下顶点(右面)
glEnd();//立方体绘制结束
///////////////////////////////////////////////////////////////////////
SwapBuffers(m_hDC);
编译运行代码,显示
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图形学 第三 openglnehemfc