栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

实验目的和要求

在三维观察实验的基础上,通过实现下述实验内容,掌握OpenGL中显示列表的作用和使用方法。

实验内容和原理

使用Visual Studio C++编译已有项目工程,

修改代码,通过键盘按键,控制兔子的数量(1至16个)以及整个场景的渲染模式,生成以下图形:

用按键I、K添加兔子数量增减(所有兔子均摆放着在桌面上,兔子间不要有交叉,桌面不够大可自行调整),按键L来切换显示列表和非显示列表绘制方式。WASDZC控制上下左右前后移动,空格键控制整体旋转。

通过动画以及对FPS的理解和分析显示列表对程序绘制性能的影响。

主要仪器设备

Visual Studio C++

glut.zip

Ex4-vs2010 工程

操作方法和实验步骤

做实验前首先先学习一下什么是OpenGL列表:OpenGL在即时模式(Immediate Mode)下绘图时,程序中每条语句产生的图形对象被直接送进绘图流水线,在显示终端立即绘制出来。当需要在程序中多次绘制同一个复杂的图像对象时,这种即时模式会消耗大量的系统资源,降低程序的运行效率,为此,OpenGL提供了一种更有效组织OpenGL语句的形式——显示列表。

那么在本实验中,列表对象共有两个:桌子列表和兔子列表。仿照桌子列表,在全局变量里定义兔子变量:

接下来,在GenTableList函数中修改,添加兔子列表:

在Draw_Table_List函数中添加画兔子的部分,但是考虑到画兔子的数量取决于你的按键,数量会随着按键变化,因此把数量设置成了全局变量 int num = 1;

测试运行!

发现很鬼畜,于是调整兔子的位置与桌面的大小,这一步是用目测法,具体代码就不列出来了,只是改了参数。直到调整到显示正常:

实验数据记录和处理

本次实验的一个重点在于分析FPS值。我们可以明显的感觉到,随着兔子数量增加,旋转的速度明显变慢,而列表显示又比普通显示的旋转速度要快。这其中的原因分析就用到了FPS。

FPS的含义是每秒传输帧数,它的大小反映了绘制的流畅性。首先先查阅资料与GLUT库帮助文档,对getFPS函数做注释与分析:

实验结果与分析

通过实验,我们发现在使用显示列表的情况下,每秒刷新的帧率普遍要更高。

显示列表是一种快速的缓存,当我们须要重复地绘制同一物体时,能够将其存入显示列表,并在绘制时调用显示列表,这样就避免了由于重复调用而导致的重复计算。

显示列表是一组存储在一起的OpenGL函数,可以在以后执行。调用一个显示列表时,它所存储的函数就会按照顺序执行。类似存储在服务端(GPU)的缓冲区对象,能够提高效率。在创建显示列表时,只有表达式的值存储在显示列表中,并且这个值也不会再修改。还有像有返回值的函数与依赖客户端状态的函数都不能放在显示列表中。这主要是因为这样的函数需要依赖服务端数据与状态,但显示列表是存储在服务端的。

简单来说,显示列表的优势就在于高效绘制,但是劣势也十分明显——不能即时修改,也就是无法动态绘制。

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/968153.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号