没有合适的资源?快使用搜索试试~ 我知道了~
16030199025_张俊华_第二次上机报告1
需积分: 0 0 下载量 169 浏览量
2022-08-08
20:29:54
上传
评论
收藏 144KB DOCX 举报
温馨提示
试读
27页
西安电子科技大学 计算机图形学 课程实验报告成 绩成 绩计算机科学与技术学院 1603019 班姓名 张俊华 学号 16030199025 实验日期 2018
资源详情
资源评论
资源推荐
西安电子科技大学
计算机图形学 课程实验报告
计算机科学与技术学院 1603019 班
姓名 张俊华 学号 16030199025
实验日期 2018 年 11 月 1 日
实验地点 E-Ⅲ-203
指导教师评语:
指导教师:
年 月 日
实验报告内容基本要求及参考格式
一、实验目的
二、实验所用仪器(或实验环境)
三、实验基本原理及步骤(或方案设计及理论计算)
四、实验数据记录(或仿真及软件设计)
五、实验结果分析及回答问题(或测试环境及测试结果)
成 绩
计算机图形学第二次上机实验
一、实验内容
一、 图形变换(借鉴 lec4 课件)
1. 利用 OpenGL 实现一个立方体关于参考点(10.0,20.0,10.0)进行放缩变换,放
缩因子为(2.0,1.0,0.5)。
2. 利用 OpenGL 实现一个矩形关于
𝑦
=
𝑥
+
5
对称的新图形。
3. 通过定义键盘回调函数,每按一次空格键,让三个点依次完成画点、画线、画
三角形、让三角形平移和缩放,并让三角形沿三角形中心旋转起来。
二、实验环境
Microsoft Visual Studio Community 2017
VisualStudio.15.Release/15.8.6+28010.2041 Microsoft Visual C++ 2017 Windows10
SDK 10.0.17134.0
三、实验步骤
立方体的放缩变换
编写 changeSize() 回调函数
由于本实验绘制了三维场景,故需要 gluPerspective() 这个函数设置三维透视投
影矩阵,在执行命令 glMatrixMode(GL_PROJECTION) 和 glLoadidentity() 之后使
用;它指定了观察的视景体在世界坐标系中的具体大小,其中的参数 aspect 应该
与窗口的宽高比大小相同。这样显示出的物体才不会被扭曲。
由 gluPerspective() 产生的矩阵是当前矩阵与指定的矩阵相乘得到的,就好像是
调用 glMatrix()产生的矩阵一样。为了使透视矩阵替代当前矩阵,在调用
gluPerspective() 之前要先调用 glLoadidentity() 这个函数,把当前矩阵重置为
单位矩阵。
最终代码如下:
void ChangeSize(GLsizei w, GLsizei h)
{
GLfloat aspectRatio;
if (h == 0)
h = 1;
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
aspectRatio = (GLfloat)w / (GLfloat)h;
gluPerspective(60, aspectRatio, 10, 60);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
编写 RenderScene() 函数进行场景渲染
首先需要绘制一个立方体,绘制立方体,可以通过调用 glut 库的 glutWireCube 函
数实现:
glColor3f(1.0, 0.0, 0.0);
glutWireCube(10.0);
执行这两条语句,以原点为中心,绘制一个边长为 10 的立方体。接下来需要对立
方体关于参考点(10.0,20.0,10.0)进行放缩变换,放缩因子为(2.0,1.0,0.5)
由于模型和视图的变换都通过矩阵运算来实现,在进行变换前,应先设置当前操作
的矩阵为“模型视图矩阵”。设置的方法是以 GL_MODELVIEW 为参数调用
glMatrixMode 函数:
glMatrixMode(GL_MODELVIEW);
需要在进行变换前把当前矩阵设置为单位矩阵
glLoadIdentity();
之后将世界坐标原点移动到放缩参考点,然后按比例缩放
glTranslatef(10.0, 20.0, 10.0);
glScalef(2.0, 1.0, 0.5);
完成缩放之后,将坐标原点移动回初始位置:
glTranslatef(-10.0, -20.0, -10.0);
最后使用 glutWireCube 函数,绘制放缩之后的立方体:
glColor3f(0.0, 1.0, 0.0);
glutWireCube(10.0);
glFlush();
注册键鼠操作回调函数,实现运行时动态视角变换
通过鼠标键盘在执行时动态调整视角,获得更好的结果预览体验,视角变换通过
gluLookAt() 函数,完成从世界坐标系到眼坐标系的转换,通过注册
glutMouseFunc(MouseFunc);
glutMotionFunc(MouseMotion);
按住鼠标右键可以上下左右旋转视角。按住鼠标左键并前后移动可以放大或缩小
视景。具体函数实现见附录完整代码。
矩形关于直线对称
本实验不使用 OpenGL 內建的模型视图矩阵运算实现,而是自己进行矩阵运算,得
出变换矩阵,使用该矩阵与原始矩形坐标点相乘,得到变换后的新坐标,完成对称
图形的绘制。
由于要进行二维平面上的图形变换,因此需要使用三维齐次坐标变换矩阵进行运算。
定义三维矩阵数据类型:
typedef GLfloat martix33[3][3];
定义三维矩阵乘法运算:
剩余26页未读,继续阅读
萱呀
- 粉丝: 24
- 资源: 354
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 2022NOC软件创意编程赛项真题python小学高年级-决赛(有解析)
- mathml转换latex需要的xsl文件
- 2022NOC软件创意编程赛项真题图形化小学高年级-决赛赛(有解析)
- gbase驱动下载gbase-connector-java-8.3.81.53驱动下载
- 2022NOC软件创意编程赛项真题图形化小学低年级-决赛赛(有解析)
- InsightFace从青铜到王者,超大规模人脸识别的优雅解法
- python后端开发spider框架详解
- 基于 STM32 与 ESP8266 的智能家居系统源码.zip
- 毕业设计:基于SSM的mysql-个性化点餐配送系统(源码 + 数据库 + 说明文档)
- 基于matlab的鱼苗计数识别(GUI界面).zip代码57
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0