资源下载地址:https://download.csdn.net/download/sheziqiong/85627947

实验目的和要求

在OpenGL编程基础上,通过实现实验内容,掌握OpenGL的矩阵使用,并验证课程中矩阵变换的内容。

实验内容和原理

使用Visual Studio C++编译已有项目工程,并修改代码生成以下图形(参考示例答案):

其中最左边的桌子循环上移(即匀速上移到一定位置后回到原点继续匀速上移),中间的桌子不断旋转,最右边的桌子循环缩小(即不断缩小到一定大小后回归原来大小继续缩小)。

桌子的模型尺寸如下:

主要仪器设备

Visual Studio C++

Ex2 工程

操作方法和实验步骤

绘制桌子

桌子是一个组合几何体,我们从绘制一个六面体开始。比如画一个桌子腿。

首先考虑到后续要组合多个图形并且要做矩阵变换,用glPushMatrix和glPopMatrix函数,对栈顶矩阵进行处理。对于矩阵的操作都是对于矩阵栈的栈顶来操作的。当前矩阵即为矩阵栈的栈顶元素,而对当前矩阵进行平移、旋转等的变换操作也同样是对栈顶矩阵的修改。所以我们在变换之前调用glPushMatrix()的话,就会把当前状态压入第二层,不过此时栈顶的矩阵也与第二层的相同。当经过一系列的变换后,栈顶矩阵被修改,此时调用glPopMatrix()时,栈顶矩阵被弹出,且又会恢复为原来的状态。

glScalef函数对于所要绘制图形的尺寸缩放做了说明,glutSolidCube函数可以画出一个实心的正方体,在前面缩放函数的限制下就会变成相应比例的直六面体。经过实际的观察,我认为边长为0.25比较符合视觉效果。

最后是组合的画出来一个桌子。

矩阵变换

关于几何变换部分的代码写在redraw函数中。首先把多边形显示模式的注释去掉,变成线框显示形式。平移与旋转的部分已经写好,将绘制部分换成前面写好的画桌子函数就可以了。

在写缩放部分之前先将缩放比例系数fScale定义为全局变量,初始化为1.0f(原始大小)。

下面完善变换函数:

对称地在右边画一个桌子,然后根据比例进行缩放,每次缩放比例减小0.0005,当缩放比例小于0.1的时候,恢复为原大小,循环进行。同时在这一步,把每次变化的系数都变小了,这样整个变化的过程更加明显,速度也会变慢,看起来没那么难受了。

实验数据记录和处理

(略)

实验结果与分析

实心效果:

线框效果:

讨论、心得

1.关于线框效果

源文件中给出的方法是glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);

也可以在绘制的时候直接使用glutWireCube函数来画线框立方体。效果一样。

2.reshape函数中的一些重点函数的学习和了解

glViewport(GLint x,GLint y,GLsizei width,GLsizei height):x,y 以像素为单位,指定了视口的左下角位置。width,height 表示这个视口矩形的宽度和高度,根据窗口的实时变化重绘窗口。

glMatrixMode(GLenum mode):用于指定用哪个矩阵作为当前矩阵,mode用于指定哪一种矩阵栈是其后矩阵操作的目标。mode可取:GL_MODELVIEW: 把其后的矩阵操作施加于造型视图矩阵栈;GL_PROJECTION: 把其后的矩阵操作施加于投影矩阵栈。;GL_TEXTURE: 把其后的矩阵操作施加于纹理矩阵栈。

glLoadIdentity(void):恢复初始坐标系。

gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar):fovy:视角的大小,如果设置为0,什么也看不到,如果为180,则为广角视野;aspect:实际窗口的纵横比;zNear:近处裁面;zFar:远处裁面。整体呈现一种透视效果。

资源下载地址:https://download.csdn.net/download/sheziqiong/85627947

基于C++OpenGL实现的小桌子图形绘制相关推荐

  1. 基于C++OpenGL实现的小桌茶壶图形绘制

    资源下载地址:https://download.csdn.net/download/sheziqiong/85628081 实验目的和要求 在模型变换实验的基础上,通过实现下述实验内容,掌握OpenG ...

  2. 基于C++OpenGL实现的小桌兔子图形绘制

    资源下载地址:https://download.csdn.net/download/sheziqiong/85628187 实验目的和要求 在三维观察实验的基础上,通过实现下述实验内容,掌握OpenG ...

  3. 计算机图形学——实验一 VS+OpenGL绘图环境及基本图形绘制

    实验一 VS+OpenGL绘图环境及基本图形绘制 一.实验目的 熟悉OpenGL的主要功能: 掌握OpenGL的绘图流程和原理: 掌握OpenGL核心函数的使用: 熟悉OpenGL基本图形元素的绘制函 ...

  4. 基于Python的自媒体小助手---图形用户界面Graphical User Interface)

    图形用户界面Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面.GUI 的需求变得明显,因为第一个人/计算机文本界面是通过所谓的 ...

  5. c++ 判断硬件是否支持opengl_【译】OpenGL 教程:二维图形绘制

    为了更好的排版,请到以下博客查看此教程 OpenGl 环境搭建与介绍​iamazing.cn 1. 搭建 OpenGL 环境 取决于你的编程平台,有以下教程: 基于 C++(也可以看译者自己写的教程) ...

  6. 【OpenGL ES】二维图形绘制

    目录 OpenGL ES 学习--2D 着色器语言基础知识 绘制纯色背景 JAVA版本 C++版本 绘制圆点.直线.三角形 JAVA版本 C++版本 绘制彩色三角形 JAVA版本 C++版本 绘制纯色 ...

  7. OpenGL(三)三维图形绘制

    #include "stdafx.h" #include<GL/freeglut.h> #include<GLFW/glfw3.h>// 绘图棱锥 void ...

  8. 计算机图形学——OpenGL学习系列之绘制3D下的小桌子

    计算机图形学--OpenGL学习系列之绘制3D下的小桌子 做的一个小练习,主要用到了几何变换还有gl自带的一个绘制立方体的函数,顺便体会一下glPush和glPop的用法.另外,从2D到3D,开心到飞 ...

  9. SurfaceView简单理解,Android混淆,Android openGl开发详解简单图形的绘制,

    SurfaceView允许你在非ui线程中去绘制. SurfaceView的帧率可以操作60FPS 在要求实时性比较高的游戏开发中,显然,view的ondraw是满足不了你的,这时候只能是用Surfa ...

最新文章

  1. Win XP等多个版本操作系统技术支持将到期
  2. 内存Cookie和硬盘Cookie
  3. Py之turicreate:turicreate的简介、安装、使用方法之详细攻略
  4. C++内存管理——指针数组
  5. rsync服务扩展应用
  6. 信息学奥赛一本通 2047:【例5.16】过滤空格 | OpenJudge NOI 1.7 23:过滤多余的空格
  7. 搭建Sql Server AlwaysOn 视频教程
  8. mysql 修改字符集为utf8mb4
  9. linux抓包查看请求接口源ip,linux 抓包
  10. iOS视频录制及gif图片制作
  11. oracle 定时备份数据库脚本
  12. 网易互娱-后台开发(支付方向)二面
  13. 2010-01-22 | 占豪收评:牛市继续还是进入熊市?
  14. 操作系统-5大功能、5大类型
  15. FFmpeg使用滤镜链为视频插入多张图片
  16. 3.16 使用历史纪录画笔工具 [原创Ps教程]
  17. ioppc技术_广东电网有限责任公司河源供电局基于IOPPC线路光纤网络智能态势感知技术研究技术服务等5个项目采购公告...
  18. 委托实现信用卡用户定时还款功能
  19. java常用时间工具类
  20. 联盟服务器维护,英雄联盟维护时间 lol官网服务器维护公告

热门文章

  1. rk3399 USB转网口之AX88772A移植调试
  2. 超出的字用省略号来代替
  3. [BZOJ4338][BJOI2015]糖果(扩展Lucas)
  4. Altium Designer 18 音频均衡器电路 层次化原理图设计修改点归类
  5. 2018软工实践—Alpha冲刺(8)
  6. java 空文件_java删除指定目录下所有空文件夹的方法
  7. 剑指offer 33. 二叉搜索树的后序遍历
  8. 安卓手机刷机常用名词解释
  9. PCM / I2S / AC97简介
  10. 【数据压缩】实验五——JPEG原理分析及JPEG解码器的调试