{ }
//清除颜色缓存 //指定颜色 //模型变换 //指定模型 //马上执行
6. reshape函数
功能:设置视口;窗口大小改变时,改变视域体,使窗口的宽高比与视域体的宽高比保持一致。
void reshape (int w, int h) { }
7. 包含头文件,定义全局变量
#include
五、思考题
1.在reshape函数中,窗口改变时如果不同时改变视域体的宽高比,会产生什么效果?
2.近裁剪面与物体相交时,会产生什么效果?
六、报告要求
1.认真书写实验报告,字迹清晰,格式规范。报告中应写清姓名、学号、实验日期、实验题目、实验目的、实验原理。
2.报告中应书写主要源程序,且源程序中要有注释。
3.报告中应包含运行结果及结果分析。如调试通过并得到预期的效果,请注明?通过?并粘贴运行效果图;如未调试通过或结果不正确,试分析原因。
4.报告最后包含实验总结和体会。
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 (“OpenGL中的光照”); init (); glutDisplayFunc(display); glutReshapeFunc(reshape); glutKeyboardFunc(keyboard); glutMainLoop(); return 0;
5
}
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
五、思考题
1.若定义三个光源,光源0和光源1照在左侧球体上,光源1和光源2照在右侧球体上,如何实现?
6
2.在OpenGL中,要使光照效果正常,需要指定模型的法向量。在本实验中利用glut函数显示球体时,没有指定球体的法向量,你在实验中是否得到了正确的光照效果?请分析原因。
六、报告要求
1.认真书写实验报告,字迹清晰,格式规范。报告中应写清姓名、学号、实验日期、实验题目、实验目的、实验原理。
2.报告中应书写主要源程序,且源程序中要有注释。
3.报告中应包含运行结果及结果分析。如调试通过并得到预期的效果,请注明?通过?并粘贴运行效果图;如未调试通过或结果不正确,试分析原因。
4.报告最后包含实验总结和体会。
7
相关推荐: