图形学第三课openglnehemfc.docx

上传人:b****5 文档编号:30343927 上传时间:2023-08-13 格式:DOCX 页数:10 大小:145.43KB
下载 相关 举报
图形学第三课openglnehemfc.docx_第1页
第1页 / 共10页
图形学第三课openglnehemfc.docx_第2页
第2页 / 共10页
图形学第三课openglnehemfc.docx_第3页
第3页 / 共10页
图形学第三课openglnehemfc.docx_第4页
第4页 / 共10页
图形学第三课openglnehemfc.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

图形学第三课openglnehemfc.docx

《图形学第三课openglnehemfc.docx》由会员分享,可在线阅读,更多相关《图形学第三课openglnehemfc.docx(10页珍藏版)》请在冰豆网上搜索。

图形学第三课openglnehemfc.docx

图形学第三课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);

编译运行代码,显示

 

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 营销活动策划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1