计算机图形学实验代码截图
更新时间:2023-04-12 10:22:01 阅读量: 实用文档 文档下载
- 计算机图形学画图代码推荐度:
- 相关推荐
目录
实验一:OpenGL基础知识 0
实验二 OpenGL中的建模与变换 (1)
实验三 OpenGL中的光照 (4)
实验四 OpenGL中的拾取 (7)
实验五 OpenGL中的纹理映射 (10)
实验一:OpenGL基础知识
一、实验目的
1、建立Windows系统下的OpenGL实验框架。
2、学习理解OpenGL工作流程。
二、实验环境
⒈硬件:每个学生需配备计算机一台。
⒉软件:Visual C++;
三、实验内容
1、建立非控制台的Windows程序框架。
2、建立OpenGL框架。
3、建立OpenGL框架的类文件。
4、完善Windows框架。
5、理解程序间的相互关系。
四、实验要求
1、学习教材第2章的内容。
2、理解教材中相关实例的代码,按要求添加到适当的地方,调试并通过运行。
3、运行结果应该与教材中的相关实例相符。
4、编译第2章的框架代码,修改背景色、窗口标题。
五、程序设计提示
(略)
六、报告要求
1.认真书写实验报告,字迹清晰,格式规范。报告中应写清姓名、学号、实验日期、实验题目、实验目的、实验原理。
2.报告中应书写主要源程序,且源程序中要有注释。
3.报告中应包含运行结果及结果分析。如调试通过并得到预期的效果,请注明‘通过’并粘贴运行效果图;如未调试通过或结果不正确,试分析原因。
4.报告最后包含实验总结和体会。
实验二 OpenGL中的建模与变换
一、实验目的
1.学习配置OpenGL环境。
2.掌握在OpenGL中指定几何模型的方法。
3. 掌握OpenGL中的透视投影和正投影的设置方法,学会诊断投影问题导致的显示异常。
二、实验环境
⒈硬件:每个学生需配备计算机一台。
⒉软件:Visual C++;
三、实验内容
1.建立OpenGL编程环境
(注:Windows自带gl和glu,还需要安装glut库文件。)
(a)查看Windows自带的OpenGL文件。在文件夹c:\windows\system32下查看是否存在文件opengl32.dll和glu32.dll;在Visual Studio的安装目录Vc7\PlatformSDK\Include\gl下查看是否存在gl.h和glu.h;在Vc7\PlatformSDK\Lib下是否存在opengl32.lib和glu32.lib。
(b)安装glut库。将文件glut.h复制到Visual Studio的安装目录Vc7\PlatformSDK\Include\gl下;将文件glut32.lib复制到Vc7\PlatformSDK\Lib下;将文件glut32.dll复制到c:\windows\system32下。
2.OpenGL几何建模
(a)建立基本的几何图元,指定图元的颜色,对图元进行平移、旋转、缩放变换。基本几何图元包括:
GL_LINES(线)、GL_LINE_STRIP(线带)、GL_LINE_LOOP(线环)、GL_TRIANGLES(三角形)、GL_TRIANGLE_STRIP(三角形带)、GL_TRIANGLE_FAN(三角形扇)、GL_QUADS(四边形)、GL_QUAD_STRIP(四边形带)、GL_POLYGON(多边形)。
(b) 设置合适的投影参数,分别用透视投影和正投影显示步骤(a)中指定的几何图元。
(c) 每按下鼠标左键一次,模型向右旋转一定角度。
(d) 按下ESC键,退出程序。
四、程序设计提示
1. main函数
功能:创建窗口;注册回调函数;主循环。
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize (500, 500);
glutInitWindowPosition (100, 100);
glutCreateWindow(”OpenGL中的建模与变换”);
init ();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutMouseFunc(mouseFunc);
glutMainLoop();
return 0;
}
2. 初始化函数:
功能:设置清除所用的颜色;指定着色模型。
void init(void)
{
}
3. 键盘响应函数:
功能:按下ESC键时退出程序。
void keyboard(unsigned char key, int x, int y)
{
}
4. 鼠标响应函数
功能:按下鼠标左键时,改变旋转角度(或平移量、缩放系数)。
void mouseFunc(int button, int state, int x, int y)
{
}
5. 显示函数:
功能:指定几何模型;指定颜色;进行模型变换。
void display(void)
{
//清除颜色缓存
//指定颜色
//模型变换
//指定模型
//马上执行
}
6. reshape函数
功能:设置视口;窗口大小改变时,改变视域体,使窗口的宽高比与视域体的宽高比保持一致。
void reshape (int w, int h)
{
}
7. 包含头文件,定义全局变量
#include
#include
GLdouble angle = 0.0;
GLdouble translation = 0.0;
GLdouble scale = 1.0;
五、思考题
1.在reshape函数中,窗口改变时如果不同时改变视域体的宽高比,会产生什么效果?
2.近裁剪面与物体相交时,会产生什么效果?
六、报告要求
1.认真书写实验报告,字迹清晰,格式规范。报告中应写清姓名、学号、实验日期、实验题目、实验目的、实验原理。
2.报告中应书写主要源程序,且源程序中要有注释。
3.报告中应包含运行结果及结果分析。如调试通过并得到预期的效果,请注明‘通过’并粘贴运行效果图;如未调试通过或结果不正确,试分析原因。
4.报告最后包含实验总结和体会。
实验三 OpenGL中的光照
一、实验目的
1.理解光照模型。
2.掌握OpenGL中的光照编程方法。
3. 学会诊断OpenGL中的光照效果异常。
二、实验环境
⒈硬件:每个学生需配备计算机一台。
⒉软件:Windows操作系统+Visual C++;
三、实验内容
1.建模
利用glut函数指定两个球体模型,它们一左一右并列放置在原点两侧,设置合适的视域体进行观察。
2.定义光源属性
定义两个光源,分别设置它们的环境光、漫反射光和镜面反射光分量,设置两个光源的位置分别位于左侧球体的左前方和右侧球体的右前方;左侧的光源为红色,右侧的光源为绿色。
3. 定义球体的材质
4. 显示球体时,让左边的光源只照亮左边的球体,右边的光源只照亮右边的球体。
5. 按下ESC键,退出程序。
四、程序设计提示
1. main函数
功能:创建窗口;注册回调函数;主循环。
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize (500, 500);
glutInitWindowPosition (100, 100);
glutCreateWindow (“OpenG L中的光照”);
init ();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}
2. 初始化函数:
功能:设置清除所用的颜色;指定着色模型;设置材质;初始化光源参数;打开光照;打开深度测试。
void init(void)
{
}
3. 键盘响应函数:
功能:按下ESC键时退出程序。
void keyboard(unsigned char key, int x, int y)
{
}
4.显示函数:
功能:指定几何模型;指定颜色;进行模型变换。
void display(void)
{
//清除颜色缓存
//打开灯光0,关闭灯光1
//向左平移
//指定左侧球体
//打开灯光1,关闭灯光0
//向右平移
//指定右侧球体
//马上执行
}
5. reshape函数
功能:设置视口;窗口大小改变时,改变视域体,使窗口的宽高比与视域体的宽高比保持一致。
void reshape (int w, int h)
{
}
6. 包含头文件
#include
#include
五、思考题
1.若定义三个光源,光源0和光源1照在左侧球体上,光源1和光源2照在右侧球体上,如何实现?
2.在OpenGL中,要使光照效果正常,需要指定模型的法向量。在本实验中利用glut函数显示球体时,没有指定球体的法向量,你在实验中是否得到了正确的光照效果?请分析原因。
六、报告要求
1.认真书写实验报告,字迹清晰,格式规范。报告中应写清姓名、学号、实验日期、实验题目、实验目的、实验原理。
2.报告中应书写主要源程序,且源程序中要有注释。
3.报告中应包含运行结果及结果分析。如调试通过并得到预期的效果,请注明‘通过’并粘贴运行效果图;如未调试通过或结果不正确,试分析原因。
4.报告最后包含实验总结和体会。
实验四 OpenGL中的拾取
一、实验目的
1.理解OpenGL中的交互式编程方法。
2.掌握OpenGL中拾取的实现。
二、实验环境
⒈硬件:每个学生需配备计算机一台。
⒉软件:Windows操作系统+Visual C++。
三、实验内容
1.建模
利用glut函数定义两个球体模型,它们一左一右并列放置在原点两侧,设置合适的视域体进行观察。
2.拾取
将拾取函数作为鼠标响应的回调函数。在拾取函数中,建立拾取矩阵,在鼠标附近3×3的区域内选择对象,在鼠标左键按下时,判断哪一个球体被选中,还是都未被选中,并将选择缓存中的内容打印到屏幕上。
3. 设置颜色
左边球体未被选中时显示为红色,右边球体未被选中时显示为绿色,当其中任意一个被选中时,则以白色显示被选中的球体。
4. 按下ESC键,退出程序。
四、程序设计提示
1. main函数
功能:创建窗口;注册回调函数;主循环。
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize (500, 500);
glutInitWindowPosition (100, 100);
glutCreateWindow(“OpenGL中的拾取”);
init();
glutReshapeFunc(reshape);
glutDisplayFunc(display);
glutMouseFunc(pickRects);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}
2. 初始化函数:
功能:设置清除所用的颜色;打开深度测试;指定着色模型。
void init(void)
{
}
3.鼠标响应函数
功能:按下鼠标左键时,在鼠标附近3×3的区域内进行拾取。如果选中左边的球体则select = 1,如果选中右边的球体则令select = 2,如果两个球体都未被选中,则select = 0。
void pickRects (int button, int state, int x, int y)
{
}
4. 显示函数:
功能:指定几何模型;指定颜色;如果当前处于“选择模式”,则设置合适的名称栈。
void display(void)
{
}
5. reshape函数
功能:设置视口;设置视域体。
void reshape (int w, int h)
{
}
6. 键盘响应函数
功能:按下ESC键时退出程序。
void keyboard(unsigned char key, int x, int y)
{
}
7. 包含头文件,定义全局变量
#include
#include
#include
Glint select = 0;
其中select用来标记选中哪一个物体,选中左边的球体时select = 1,选中右边的球体时select = 2,当两者都未被选中时select = 0。
五、思考题
1.如果在拾取时有多个物体被选中,怎样判断哪个物体处于最上面?
2.一个命中记录中的最小和最大深度值代表什么意义,怎样取出它们的值?
六、报告要求
1.认真书写实验报告,字迹清晰,格式规范。报告中应写清姓名、学号、实验日期、实验题目、实验目的、实验原理。
2.报告中应书写主要源程序,且源程序中要有注释。
3.报告中应包含运行结果及结果分析。如调试通过并得到预期的效果,请注明‘通过’并粘贴运行效果图;如未调试通过或结果不正确,试分析原因。
4.报告最后包含实验总结和体会。
实验五 OpenGL中的纹理映射
一、实验目的
1.理解纹理映射的基本原理。
2.掌握OpenGL中定义纹理映射的方法。
3. 学会诊断OpenGL中的纹理映射出现的异常。
二、实验环境
⒈硬件:每个学生需配备计算机一台。
⒉软件:Windows操作系统+Visual C++;
三、实验内容
1.构造栅格图像
建立一幅64×64像素的RGBA模式的图像,将R、G、B、A四个分量的值保存在一个64×64×4的三维数组里,其中A为α通道,图像如图1所示。
图1 图2
2.建模
利用glBegin(GL_QUADS)函数定义两个矩形,一左一右放置,并设置合适的视域体进行观察。
3. 将步骤1所生成的图像作为纹理,映射到步骤2所定义的两个矩形上,指定合适的纹理坐标,使得左边的矩形绘制得到的图像与图1一致,右边的矩形绘制结果如图2所示。
4. 按下ESC键,退出程序。
四、程序设计提示
1. main函数
功能:创建窗口;注册回调函数;主循环。
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(500, 500);
glutInitWindowPosition(100, 100);
glutCreateWindow("OpenGL中的纹理映射");
init();
glutReshapeFunc(reshape);
glutDisplayFunc(display);
glutKeyboardFunc (keyboard);
glutMainLoop();
return 0;
}
2. 初始化函数:
功能:设置清除所用的颜色;指定着色模型;打开深度测试;构造栅格图像;创建纹理;打开纹理映射。
void init(void)
{
}
3. 键盘响应函数:
功能:按下ESC键时退出程序。
void keyboard(unsigned char key, int x, int y)
{
}
4. 显示函数:
功能:定义几何模型;绑定纹理;指定纹理坐标和几何坐标。
void display(void)
{
//清除颜色缓存和深度缓存
//绑定纹理
//指定模型顶点的纹理坐标和几何坐标
//马上执行
}
6. reshape函数
功能:设置视口;窗口大小改变时,改变视域体,使窗口的宽高比与视域体的宽高比保持一致。
void reshape (int w, int h)
{
}
7. 包含头文件,定义全局变量
#define ImageWidth 64
#define ImageHeight 64
static GLubyte Image[ImageHeight][ImageWidth][4];
static GLuint texName;
其中,ImageWidth为图像宽度,ImageHeight 为图像高度,Image为图像数据,texName为纹理名称。
五、思考题
如何给不同的物体映射不同的纹理图像?
六、报告要求
1.认真书写实验报告,字迹清晰,格式规范。报告中应写清姓名、学号、实验日期、实验题目、实验目的、实验原理。
2.报告中应书写主要源程序,且源程序中要有注释。
3.报告中应包含运行结果及结果分析。如调试通过并得到预期的效果,请注明‘通过’并粘贴运行效果图;如未调试通过或结果不正确,试分析原因。
4.报告最后包含实验总结和体会。
实验2:
代码:#include
#include
GLdouble angle = 10.0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glBegin(GL_POLYGON);
glVertex2d(-0.5,-0.5);
glVertex2d(-0.5,0.5);
glVertex2d(0.5,0.5);
glVertex2d(0.5,-0.5);
glEnd();
glFlush();
}
void mouseFunc(int button,int state,int x,int y)
{
//旋转
if(state==GLUT_DOWN && button==GLUT_LEFT_BUTTON)
{
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
if(angle<360)
angle+=10;
else
angle-=360;
glRotatef(angle,1,1,2);
glutPostRedisplay();
}
}
void keyboard(unsigned char key,int x,int y)
{
if(key==27)
{
exit(-1);
}
}
void init()
{
glClearColor(0.0,0.0,0.0,0.0);
glColor3f(1.0,0.0,0.0);
}
void reshape(int w,int h)
正在阅读:
计算机图形学实验代码截图04-12
迪拜多种商品交易中心DMCC自由区简介03-28
1.索赔报告-精华12-24
党员转正征求党内外群众意见模板09-05
计划生育政策法规宣传教育教案09-01
守望那滴泪作文700字06-20
2.2 导数的概念及其几何意义 课件1 (北师大选修2-2)04-21
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 截图
- 图形
- 实验
- 代码
- 计算机
- 物业项目员工宿舍管理规定
- 2022年南京航空航天大学506,中国特色社会主义理论之毛中特理论体
- 组织行为学(论当代大学生人际关系)范文.doc
- 《大豆清洁生产提取功能因子产品项目可研报告》(86页)(word版)
- 水利水电工程师在哪家挂靠注册好?
- 劳埃德拉力试验机(落地式)
- 秀外慧中CASIO卡西欧GSHOCK双显运动石英男表
- 女痣的位置与命运图
- 一年四季各有哪些水果成熟
- 恒大地产集团有限公司工程管理制度
- 2022年华南师范大学01603分析化学考研复试核心题库
- 【最新】高尔夫球如何握杆-推荐word版 (3页)
- 精选儿童常用顺口溜大全.doc
- 人教版2022年七年级英语上册Unit5—9单元练习汇编(无答案)
- 0603固定资产管理办法(QW06-03:2010/1)
- 最新北师大版四年级上册数学《期中考试试题》(带答案)
- 机场代码表_2014_09_24_09_12_08
- 专科疾病常规护理工作指引
- 2022年春高一地理湘教版必修2课后练习题:1.2 人口合理容量
- 会计恒等式案例word版