实验三OpenGL鼠标响应Word下载.docx

上传人:b****2 文档编号:15182333 上传时间:2022-10-28 格式:DOCX 页数:9 大小:79.02KB
下载 相关 举报
实验三OpenGL鼠标响应Word下载.docx_第1页
第1页 / 共9页
实验三OpenGL鼠标响应Word下载.docx_第2页
第2页 / 共9页
实验三OpenGL鼠标响应Word下载.docx_第3页
第3页 / 共9页
实验三OpenGL鼠标响应Word下载.docx_第4页
第4页 / 共9页
实验三OpenGL鼠标响应Word下载.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

实验三OpenGL鼠标响应Word下载.docx

《实验三OpenGL鼠标响应Word下载.docx》由会员分享,可在线阅读,更多相关《实验三OpenGL鼠标响应Word下载.docx(9页珍藏版)》请在冰豆网上搜索。

实验三OpenGL鼠标响应Word下载.docx

2.旋转后的茶壶:

 

5、实验代码

1.#include<

gl/glut.h>

2.

3.GLfloatrx=0,ry=0,angle=0;

4.GLintwinWidth=600,winHeight=600;

5.GLintmouseDx,mouseDy;

6.

7.

8.//////////显示函数

9.voidDisplay(){

10.////////GL_COLOR_BUFFER_BIT(用背景颜色填充)

11.glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

12.

13.//glPushMatrix();

14.

15.glRotatef(1,rx,ry,0);

16.

17.glColor3f(0.0,0.0,1.0);

18.

19.//glutWireTeapot(160);

20.glutSolidTeapot(120);

21.

22.//glPopMatrix();

23.

24.///交换缓冲区

25.glutSwapBuffers();

26.//glFlush();

//刷新绘图命令

27.}

28.

29.

30.//设置渲染状态(听起来满下人,实际上很简单)

31.voidSetupRC(void)

32.{

33.//清除颜色(这里为黑色,为了方便找画的那个点),可以理解成背景颜色

34.//和glColor4f(1.0f,0.0f,0.0f,1.0f)一样,所有参数都在0.0到1.0之间,后缀f是表示参数是浮点型的

35.//最后的那个1.0f是透明度,0.0f表示全透明,1.0f是完全不透明

36.glClearColor(1.0f,1.0f,1.0f,1.0f);

37.}

38.

39.//当绘制的窗口大小改变时重新绘制,使绘制的图形同比例变化,

40.//几乎所有OpenGL程序中的这个函数都是一样的,所以,放心大胆的拷贝吧

41.voidChangeSize(intw,inth)

42.{

43.winWidth=w;

44.winHeight=h;

45.//设置观察视野为窗口大小(用FLASH里面的话来说应该叫设置摄象机视野)

46.glViewport(0,0,w,h);

47.//重置坐标系统,指定设置投影参数

48.glMatrixMode(GL_PROJECTION);

49.///////调用单位矩阵,去掉以前的投影参数设置

50.glLoadIdentity();

51.//////设置投影参数

52.glOrtho(-w/2,w/2,-h/2,h/2,-w,w);

53.

54.glMatrixMode(GL_MODELVIEW);

55.glLoadIdentity();

56.}

57.

58.

59.voidinit()//初始化背景颜色,光照,材质等

60.{

61.glClearColor(0.9,0.9,0.8,1.0);

//初始背景色

62./*********光照处理**********/

63.GLfloatlight_ambient[]={0.0,0.0,0.0,1.0};

64.GLfloatlight_diffuse[]={1.0,1.0,1.0,1.0};

65.GLfloatlight_specular[]={1.0,1.0,1.0,1.0};

66.GLfloatlight_position0[]={100.0,100.0,100.0,0};

67.//定义光位置得齐次坐标(x,y,z,w),如果w=1.0,为定位光源(也叫点光源),

68.//如果w=0,为定向光源(无限光源),定向光源为无穷远点,因而产生光为

69.//平行光。

70.glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient);

//环境光

71.glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse);

//漫射光

72.glLightfv(GL_LIGHT0,GL_SPECULAR,light_specular);

//镜面反射

73.glLightfv(GL_LIGHT0,GL_POSITION,light_position0);

//光照位置

74./********材质处理***********/

75.GLfloatmat_ambient[]={0.0,0.2,1.0,1.0};

76.GLfloatmat_diffuse[]={0.8,0.5,0.2,1.0};

77.GLfloatmat_specular[]={1.0,1.0,1.0,1.0};

78.GLfloatmat_shininess[]={100.0};

//材质RGBA镜面指数,数值在0~128范围内

79.

80.glMaterialfv(GL_FRONT,GL_AMBIENT,mat_ambient);

81.glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse);

82.glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);

83.glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess);

84.glEnable(GL_LIGHTING);

//启动光照

85.glEnable(GL_LIGHT0);

//使第一盏灯有效

86.glEnable(GL_DEPTH_TEST);

//测试深度缓存

87./********其他可选项***********/

88.//glDepthFunc(GL_LESS);

//函数指定比较函数,用来比较每个引入象素的z值和深度缓存中给定的z值,只有当

89.//激活深度检验时才执行此比较。

90.//glEnable(GL_CULL_FACE);

//剔除多边形表面:

在三维空间中,一个多边形虽然有两个面,但我们无法看见背

91.//面的那些多边形,而一些多边形虽然是正面的,但被其他多边形所遮挡。

如果将

92.//无法看见的多边形和可见的多边形同等对待,无疑会降低我们处理图形的效率。

93.//在这种时候,可以将不必要的面剔除。

94.//glCullFace(GL_FRONT);

//glCullFace的参数可以是GL_FRONT,GL_BACK或者GL_FRONT_AND_BACK,分别表示

95.//剔除正面、剔除反面、剔除正反两面的多边形。

96.//glEnable(GL_COLOR_MATERIAL);

//材质颜色追踪当前颜色

97.}

98.

99.

100./////////////////鼠标点击

101.voidMousePlot(GLintbutton,GLintaction,GLintxMouse,GLintyMouse){

102.if(button==GLUT_LEFT_BUTTON&

&

action==GLUT_DOWN){

103.mouseDx=xMouse;

104.mouseDy=yMouse;

105.}

106.if(button==GLUT_LEFT_BUTTON&

action==GLUT_UP){

107.glutPostRedisplay();

108.}

109.}

110.////////////////鼠标移动

111.voidMouseMove(GLintxMouse,GLintyMouse){

112.

113.//angle+=2;

114.if(xMouse>

mouseDx&

yMouse==mouseDy)

115.{rx=0;

ry=1;

}

116.elseif(xMouse<

117.{rx=0;

ry=-1;

118.elseif(xMouse==mouseDx&

yMouse<

mouseDy)

119.{rx=-1;

ry=0;

}

120.elseif(xMouse==mouseDx&

yMouse>

121.{rx=1;

122.elseif(xMouse>

123.{rx=-1;

124.elseif(xMouse>

125.{rx=1;

126.elseif(xMouse<

127.{rx=-1;

128.elseif(xMouse<

129.{rx=1;

130.

131.

132.mouseDx=xMouse;

133.mouseDy=yMouse;

134.glutPostRedisplay();

135.}

136.

137.//主函数

138.intmain(intargc,char*argv[])

139.{

140.glutInit(&

argc,argv);

141.//设置显示模式

142.glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);

143.//设置窗口大小像素

144.glutInitWindowSize(600,600);

145.////设置窗口出现在屏幕的位置

146.glutInitWindowPosit

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1