ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:86.39KB ,
资源ID:4827557      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4827557.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验一OpenGL直线圆的绘制.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实验一OpenGL直线圆的绘制.docx

1、实验一OpenGL直线圆的绘制实验一、OpenGL直线、圆的绘制1、 实验目的1)了解OpenGL 图形库的功能和结构;2)学习了解OpenGL 程序的基本结构,及常用函数; 3)学习使用OpenGL 绘制基本图形(线、圆); 2、 实验内容 1)使用OpenGL 编写一个简单的C+程序,使该程序能够绘制出直线。 2 )使用OpenGL 编写一个简单的C+程序,使该程序能够绘制出圆。 3、 实验过程1)在系统上配置好OpenGL的环境(头文件,库文件,和链接库文件);2)使用Visual V+6.0 新建一个C+文档,并创建相应的工程;3)在文档中引入OpenGL的头文件,编辑代码实现鼠标拖动

2、画直线,画圆。4、 实验结果可单击鼠标左键,然后拖动鼠标画出两条直线,并同时画出圆;可单击鼠标右键,然后拖动鼠标画出两个圆,并同时画出直线。结果截图:1.鼠标左键主要控制绘制的直线:2.鼠标右键主要控制绘制的圆:5、 实验代码1.#include 2.#include 3.4./ GLint pNum = 0;5.GLint px1, py1, px2, py2, cx, cy, r;6.GLint winWidth=600, winHeight=600;7.8./画直线/9.void Draw_Bresenham(int pStartx,int pStarty,int pEndx,int p

3、Endy)10./用Bresenham算法画直线11. int i;12.13. if(pStartx=pEndx)14. 15. /为竖线16. if(pStarty=pEndy)17. 18. for(i=pStarty;i=pEndy;i+)19. glVertex2f(pStartx,i);20. 21. else22. 23. for(i=pEndy;i=pStarty;i+)24. glVertex2f(pStartx,i);25. 26.27. return;28. 29.30. /为横线31. if(pStarty=pEndy)32. 33. if(pStartx=pEndx)

4、34. 35. for(i=pStartx;i=pEndx;i+)36. glVertex2f(i,pStarty);37. 38. else39. 40. for(i=pEndx;i0 & m=1)52. 53. if(pStartxpEndx)54. 55. while(pStartx=0)59. 60. p+=2*m-2;61. pStarty+;62. 63. else64. p+=2*m;65. 66. 67. else68. 69. while(pEndx=0)73. 74. p+=2*m-2;75. pEndy+;76. 77. else78. p+=2*m;79. 80. 81

5、.82. return;83. 84.85. p=-2*m-1;86. if(m=-1)87. 88. if(pStartxpEndx)89. 90. while(pStartx=0)94. 95. p+=-2*m-2;96. pStarty-;97. 98. else99. p+=-2*m;100. 101. 102. else103. 104. while(pEndx=0)108. 109. p+=-2*m-2;110. pEndy-;111. 112. else113. p+=-2*m;114. 115. 116.117. return;118. 119.120. p=2/m-1;121

6、. if(m1)122. 123. if(pStartypEndy)124. 125. while(pStarty=0)129. 130. p+=2/m-2;131. pStartx+;132. 133. else134. p+=2/m;135. 136. 137. else138. 139. while(pEndy=0)143. 144. p+=2/m-2;145. pEndx+;146. 147. else148. p+=2/m;149. 150. 151.152. return;153. 154.155. p=-2/m-1;156. if(pStartypEndy)157. 158. w

7、hile(pStarty=0)162. 163. p+=-2/m-2;164. pStartx-;165. 166. else167. p+=-2/m;168. 169. 170. else171. 172. while(pEndy=0)176. 177. p+=-2/m-2;178. pEndx-;179. 180. else181. p+=-2/m;182. 183. 184.185.186./画圆/187./其他象限绘制188.void CirclePoints(int x,int y) 189. /第1象限190. glVertex2f(x,y);191. glVertex2f(y,x

8、);192. /第2象限193. glVertex2f(-x,y);194. glVertex2f(-y,x);195. /第3象限196. glVertex2f(-y,-x);197. glVertex2f(-x,-y);198. /第4象限199. glVertex2f(x,-y);200. glVertex2f(y,-x);201. 202.203./中点算法画圆204.void DrawCircle(int cx,int cy,int radis)205.206. glPushMatrix();207. glTranslatef(cx,cy,0);208. glPointSize(1)

9、;209. glColor3f(0.5f, 0.5f, 1.0f);210. glBegin(GL_POINTS);211.212. int x,y;213. double p;214. x=0;215. y=radis;216. p=1.25-radis;217. while(x=0)222. 223. y-;224. p+=2.0*(x-y)+5;225. 226. else227. p+=2*x+3;228. 229. glEnd();230. glPopMatrix();231.232.233.234./绘制坐标轴235.void DrawOx()236. glColor3f(0.95

10、, 0.7, 0.8);237. glPointSize(1);238. glBegin(GL_LINES);239. glVertex2f(-winWidth/2,0);240. glVertex2f(winWidth/2,0);241. glVertex2f(0,winHeight/2);242. glVertex2f(0,-winHeight/2);243. glEnd();244.245.246./显示函数247.void Display()248. /GL_COLOR_BUFFER_BIT(用背景颜色填充)249. glClear(GL_COLOR_BUFFER_BIT);250.2

11、51. DrawOx();252.253. glColor3f(0.0,0.0,1.0);254. 255. glBegin(GL_POINTS);256. /BresenhamLine(px1, py1, px2, py2);257. Draw_Bresenham(px1, py1, px2, py2);258. glEnd();259. glBegin(GL_POINTS);260. Draw_Bresenham(py1, px1, py2, px2);261. glEnd();262. /glBegin(GL_LINES);263. /glVertex2f(px1,py1);264. /

12、glVertex2f(px2,py2);265. /glVertex2f(py1,px1);266. /glVertex2f(py2,px2);267. /glEnd();268. DrawCircle(cx,cy,r);269. DrawCircle(cy,cx,r);270.271. /交换缓冲区272. glutSwapBuffers();273. /glFlush();/ 刷新绘图命令 274.275.276.277./ 设置渲染状态(听起来满下人,实际上很简单)278.void SetupRC(void)279.280. /清除颜色(这里为黑色,为了方便找画的那个点),可以理解成背景

13、颜色281. /和glColor4f(1.0f, 0.0f, 0.0f,1.0f)一样,所有参数都在0.0到1.0之间,后缀f是表示参数是浮点型的282. /最后的那个1.0f是透明度,0.0f表示全透明,1.0f是完全不透明283. glClearColor(1.0f, 1.0f, 1.0f,1.0f);284.285.286./ 当绘制的窗口大小改变时重新绘制,使绘制的图形同比例变化,287./几乎所有OpenGL程序中的这个函数都是一样的,所以,放心大胆的拷贝吧288.void ChangeSize(int w, int h)289.290. winWidth = w;291. winH

14、eight = h; 292. / 设置观察视野为窗口大小(用FLASH里面的话来说应该叫设置摄象机视野)293. glViewport(0,0,w,h); 294. / 重置坐标系统,指定设置投影参数295. glMatrixMode(GL_PROJECTION);296. /调用单位矩阵,去掉以前的投影参数设置297. glLoadIdentity();298. /设置投影参数299. gluOrtho2D(-w/2,w/2,-h/2,h/2);300.301.302./鼠标点击303.void MousePlot(GLint button,GLint action,GLint xMous

15、e,GLint yMouse)304. if(button=GLUT_LEFT_BUTTON & action=GLUT_DOWN)305. px1 = xMouse - winWidth/2;306. py1 = winHeight/2 - yMouse;307. 308. if(button=GLUT_LEFT_BUTTON & action=GLUT_UP)309. px2 = xMouse - winWidth/2;310. py2 = winHeight/2 - yMouse;311. glutPostRedisplay(); 312. 313. if(button=GLUT_RIG

16、HT_BUTTON & action=GLUT_DOWN)314. cx=xMouse-winWidth/2;315. cy=winHeight/2-yMouse;316. 317.318./鼠标移动319.void MouseMove(GLint xMouse,GLint yMouse)320. px2 = xMouse - winWidth/2;321. py2 = winHeight/2 - yMouse;322. r=sqrt(pow(xMouse-winWidth/2-cx),2)+pow(winHeight/2-yMouse-cy),2);323. glutPostRedispla

17、y();324.325.326./ 主函数327.int main(int argc, char* argv)328.329. glutInit(&argc, argv);330. /设置显示模式331. glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);332. /设置窗口大小像素333. glutInitWindowSize(600, 600);334. /设置窗口出现在屏幕的位置335. glutInitWindowPosition(300,160);336. /建立一个叫OpenGL的窗口337. glutCreateWi

18、ndow(OpenGL-Line);338. 339. /调用函数Display进行绘制340. glutDisplayFunc(Display);341. /调用鼠标移动函数342. /glutPassiveMotionFunc(PassiveMouseMove);343. glutMotionFunc(MouseMove);344. /调用鼠标点击函数345. glutMouseFunc(MousePlot);346. 347. /如果窗口大小改变则调用函数ChangeSize重新进行绘制348. glutReshapeFunc(ChangeSize); 349. /清屏350. SetupRC(); 351. /循环绘制352. glutMainLoop();353. 354. return 0;355.356.如有侵权请联系告知删除,感谢你们的配合!357.358.359.

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

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