网站导航网学 原创论文 网站设计 最新系统 最新研究 原创论文 获取论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 设计下载 > VC与C++类别 > 正文

基于VC++MFC的OPENGL真实感图形学演示系统

来源:http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 13/05/14

【编者按】网学网VC与C++类别频道为大家收集整理了“基于VC++MFC的OPENGL真实感图形学演示系统“提供大家参考,希望对大家有所帮助!

QQ交谈客服咨询,网学网竭诚为您服务,本站永久域名:myeducs.cn

毕业设计

2.1.1 空间齐次坐标

在空间直角坐标系中,任意一点可用一个三维坐标矩阵[x y z]表示。如果将该点用一个四维坐标的矩阵[Hx Hy Hz H]表示时,则称为齐次坐标表示方法。在齐次坐标中,最后一维坐标H称为比例因子。

  在OpenGL中,二维坐标点全看作三维坐标点,所有的点都用齐次坐标来描述,统一作为三维齐次点来处理。每个齐次点用一个向量(x, y, z, w)表示,其中四个元素全不为零。齐次点具有下列几个性质:

  1)如果实数a非零,则(x, y, x, w)和(ax, ay, az, aw)表示同一个点,类似于x/y = (ax)/( ay)。

  2)三维空间点(x, y, z)的齐次点坐标为(x, y, z, 1.0),二维平面点(x,y)的齐次坐标为(x, y, 0.0, 1.0)。

  3)当w不为零时,齐次点坐标(x, y, z, w)即三维空间点坐标(x/w, y/w, z/w);当w为零时,齐次点(x, y, z, 0.0)表示此点位于某方向的无穷远处。  注意:OpenGL中指定w大于或等于0.0。

2.1.2 空间顶点的定义

在OpenGL中,所有几何物体最终都由有一定顺序的顶点集来描述。  函数glVertex{234}{sifd}[v](TYPE coords)可以用二维、三维或齐次坐标定义顶点。例如glVertex2s(2,3) 表示一个空间顶点(2, 3, 0)

2.1.3 立方体模型的建立

在OPENGL中立方体模型的建立有很多方法,这里我来介绍两种比较常用的。一种是调用OPENGL中的库函数void auxWireCube(GLdouble size) ,GLdouble size表示该立方体的大小参数,该函数画的是一个空心的立方体模型;void auxSolidCube(GLdouble size)则描述的是一个实心的立方体。另一种是通过OpenGL三维图形的函数库所定义的点、线、多边形等图元构建一个三维立方体模型。这里我们通常用一组相关的顶点序列以一定的方式组织起来定义正四边形,而不采用单独定义多个顶点来构造。在OpenGL中,所有被定义的顶点必须放在glBegain()glEnd()两个函数之间才能正确表达一个几何图元或物体,否则,glVertex*()不完成任何操作。

在本次课程设计中定义的立方体结构如下:

glBegin(GL_QUADS);

//前侧面

glVertex3f(-50.0f, -50.0f, 50.0f); // Point 1 (Front)
glVertex3f(50.0f, -50.0f, 50.0f); // Point 2 (Front; 

glVertex3f( 50.0f, 50.0f, 50.0f); // Point 3 (Front)
glVertex3f(-50.0f, 50.0f, 50.0f); // Point 4 (Front)
// 后侧面

glVertex3f(-50.0f, -50.0f, -50.0f); // Point 1 (Back)
glVertex3f(-50.0f, 50.0f, -50.0f); // Point 2 (Back)
glVertex3f( 50.0f, 50.0f, -50.0f); // Point 3 (Back)
glVertex3f(50.0f, -50.0f, -50.0f); // Point 4 (Back)
// 顶面

glVertex3f(-50.0f, 50.0f, -50.0f); // Point 1 (Top)
glVertex3f(-50.0f, 50.0f, 50.0f); // Point 2 (Top)
glVertex3f( 50.0f, 50.0f, 50.0f); // Point 3 (Top)
glVertex3f( 50.0f, 50.0f, -50.0f); // Point 4 (Top)
// 底面

glVertex3f(-50.0f, -50.0f, -50.0f); // Point 1 (Bottom)
glVertex3f( 50.0f, -50.0f, -50.0f); // Point 2 (Bottom)
glVertex3f( 50.0f, -50.0f, 50.0f); // Point 3 (Bottom)
glVertex3f(-50.0f, -50.0f, 50.0f); // Point 4 (Bottom)
// 右侧面

glVertex3f( 50.0f, -50.0f, -50.0f); // Point 1 (Right)
glVertex3f( 50.0f, 50.0f, -50.0f); // Point 2 (Right)
glVertex3f( 50.0f, 50.0f,50.0f); // Point 3 (Right)
glVertex3f( 50.0f, -50.0f, 50.0f); // Point 4 (Right)
// 左侧面
glVertex3f(-50.0f, -50.0f, -50.0f); // Point 1 (Left)
glVertex3f(-50.0f, -50.0f, 50.0f); // Point 2 (Left)
glVertex3f(-50.0f, 50.0f, 50.0f); // Point 3 (Left)
glVertex3f(-50.0f, 50.0f, -50.0f); // Point 4 (Left)
glEnd();

2.1.4 平移和旋转

 OPENGL中平移和旋转用到下面两个库函数:

平移变换函数如下:

void glTranslate{fd}(TYPE x,TYPE y,TYPE z)

三个函数参数就是目标分别沿三个轴向平移的偏移量。这个函数表示用这三个偏移量生成的矩阵乘以当前矩阵。当参数是(0.0,0.0,0.0)时,表示对函数glTranslate*()的操作是单位矩阵,也就是对物体没有影响。

旋转变换函数如下:

void glRotate{fd}(TYPE angle,TYPE x,TYPE y,TYPE z)
函数中第一个参数是表示目标沿从点(x, y, z)到原点的方向逆时针旋转的角度,后三个参数是旋转的方向点坐标。这个函数表示用这四个参数生成的矩阵乘以当前矩阵。当角度参数是0.0时,表示对物体没有影响

本站发布的计算机毕业设计均是完整无错的全套作品,包含开题报告+程序+论文+源代码+翻译+答辩稿PPT

本文选自计算机毕业设计http://myeducs.cn
论文文章部分只是部分简介,如需了解更多详情请咨询本站客服!QQ交谈QQ3710167

原创论文

设为首页 | 加入收藏 | 论文首页 |原创论文 |
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师