目录
实验六 真实感图形算法
一、实验目的
二、实验内容
三、实验原理
四、实验示范代码(略)
五、实验步骤
六、实验结果处理
七、实验注意事项
八、预习与思考题
九、实验报告要求
实验类型:设计型 实验学时:2实验要求:必修
了解掌握OpenGL程序的光照与材质,能正确使用光源与材质函数设置所需的绘制效果。
(1)下载并运行Nate Robin教学程序包中的lightmaterial程序,试验不同的光照与材质系数;
(2)运行示范代码1,了解光照与材质函数使用。
为在场景中增加光照,需要执行以下步骤:
设置一个或多个光源,设定它的有关属性;
选择一种光照模型;
设置物体的材料属性。
1 在Windows xp/win7操作环境下,启动VC;
2 建立W32 Console Application 的应用工程;
3 建立源程序编辑环境,进行编辑源程序。
4 调试运行程序,完成实验。
演示结果并保存相关文件。
注意编程环境的配置,即在Windows环境下,OpenGL扩展库相关文件的配置,把头文件“GL.H”、库文件“OPENGL32.LIB”和动态链接库“OPENGL32.DLL”配置到相应的目录下。
预习:阅读课本相关内容,仔细阅读示范代码。
思考题:在实验5太阳系模型的基础上,尝试为其增加光照与材质效果。
1、实验报告中应包括相关操作步骤和程序代码和运行效果截图。
2.书写实验报告时要结构合理,层次分明,在分析描述的时候,需要注意语言的流畅。
茶壶代码:
#include
#include
void init(void)
{
GLfloat mat_specular[]={ 1.0,1.0,1.0,1.0 };
GLfloat mat_shininess[] = { 50.0 };
GLfloat light_position[]= {1.0,1.0,1.0,0.0};
GLfloat white_light[] = { 1.0,1.0,1.0,1.0};
GLfloat Light_Model_Ambient[]={ 0.2,0.2,0.2,0.1};
glClearColor(0.0,0.0,0.0,0.0);
glShadeModel(GL_SMOOTH);
glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);
glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess);
glLightfv(GL_LIGHT0,GL_POSITION,light_position);
glLightfv(GL_LIGHT0,GL_DIFFUSE,white_light);
glLightfv(GL_LIGHT0,GL_SPECULAR,white_light);
glLightModelfv(GL_LIGHT_MODEL_AMBIENT,Light_Model_Ambient);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSolidTeapot(0.5);
glFlush();
}
void reshape(int w,int h)
{
glViewport(0,0,(GLsizei)w,(GLsizei)h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if(w<=h)
glOrtho(-1.5,1.5,-1.5*(GLfloat)h/(GLfloat)w,1.5*(GLfloat)h/(GLfloat)w,-10.0,10.0);
else
glOrtho(-1.5*(GLfloat)w/(GLfloat)h,1.5*(GLfloat)w/(GLfloat)h,-1.5,1.5,-10.0,10.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
int main(int argc,char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB |GLUT_DEPTH);
glutInitWindowSize(500,500);
glutInitWindowPosition(100,100);
glutCreateWindow(argv[0]);
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMainLoop();
return 0;
}
下面为待完成:第一个为实验需要做的,其他的为拓展,根据自己能力看是否要做。
完结!