图形学实验六真实感图形算法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/QQQZSJ/article/details/83590443

实验六  真实感图形算法

实验类型:设计型   实验学时: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<GL/glut.h>
#include<stdlib.h>

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;
}



下面为待完成:第一个为实验需要做的,其他的为拓展,根据自己能力看是否要做。

完结! 

猜你喜欢

转载自blog.csdn.net/QQQZSJ/article/details/83590443