實(shí)驗(yàn)二OpenGL顏色填充_第1頁
實(shí)驗(yàn)二OpenGL顏色填充_第2頁
實(shí)驗(yàn)二OpenGL顏色填充_第3頁
實(shí)驗(yàn)二OpenGL顏色填充_第4頁
實(shí)驗(yàn)二OpenGL顏色填充_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上實(shí)驗(yàn)二、OpenGL顏色填充1、 實(shí)驗(yàn)?zāi)康?)了解OpenGL 圖形庫的功能和結(jié)構(gòu);2)學(xué)習(xí)了解OpenGL 程序的基本結(jié)構(gòu),及常用函數(shù); 3)學(xué)習(xí)使用OpenGL 顏色填充算法; 2、 實(shí)驗(yàn)內(nèi)容 1)使用OpenGL 編寫一個(gè)簡單的C+程序,使該程序能夠填充多邊形和圓等圖形。 2 )使用OpenGL 編寫一個(gè)簡單的C+程序,使該程序能夠填充已填充過的圖形。 3、 實(shí)驗(yàn)過程1)在系統(tǒng)上配置好OpenGL的環(huán)境(頭文件,庫文件,和鏈接庫文件);2)使用Visual V+6.0 新建一個(gè)C+文檔,并創(chuàng)建相應(yīng)的工程;3)在文檔中引入OpenGL的頭文件,編輯代碼實(shí)現(xiàn):對不同

2、圖形的不同顏色填充。4、 實(shí)驗(yàn)結(jié)果可單擊鼠標(biāo)左鍵,填充選中的圖形;可單擊鼠標(biāo)右鍵,調(diào)出菜單,可改變填充顏色,可恢復(fù)為填充狀態(tài)。結(jié)果截圖:1. 初始狀態(tài):2. 填充多邊形:3. 調(diào)出菜單,選擇顏色:4. 填充圓形:5. 填充已填充的圖形:5、 實(shí)驗(yàn)代碼1. #include "stdio.h"2. #include <GL/glut.h>3. #include <math.h>4. #include "windows.h"5.6. /程序還有問題,不知如何解決7. /圓周率8. const GLfloat Pi = 3.f;9. /

3、窗口長寬10. GLfloat WinWidth=600.0, WinHeight=600.0;11. /種子點(diǎn)12. GLint fillx,filly;13. /填充色14. GLubyte fillColor3=255,0,255;15. /判定點(diǎn)色16. GLubyte Pixel3;17. /取點(diǎn)色18. GLubyte OldColor3;19.20. /繪制初始化21. void init(void)22. 23. glClearColor(1.0, 1.0, 1.0, 1.0) ;24. glViewport(0,0,WinWidth,WinHeight);25. glMatr

4、ixMode(GL_PROJECTION);26. /調(diào)用單位矩陣,去掉以前的投影參數(shù)設(shè)置27. glLoadIdentity();28. gluOrtho2D(0.0, WinWidth, 0.0, WinHeight);29. 30. /比較顏色是否相同31. bool EqualColor(GLubyte c1,GLubyte c2)32. if(c10=c20&&c11=c21&&c12=c22)33. return true;34. else return false;35. 36. /填充點(diǎn)色37. void setPixel(GLint x,GLi

5、nt y)38. glColor3f(fillColor0, fillColor1, fillColor2);39. glBegin(GL_POINTS);40. glVertex3f(x,y,0.0);41. glEnd();42. 43.44. /種子填充函數(shù),四聯(lián)通,遞歸45. void fill(GLint x, GLint y)46. glReadPixels(x,y,1,1,GL_RGB,GL_UNSIGNED_BYTE,Pixel);47. if(EqualColor(fillColor,OldColor)48. return;49. setPixel(x,y);50. /Sle

6、ep(1);51. 52. glReadPixels(x,y-1,1,1,GL_RGB,GL_UNSIGNED_BYTE,Pixel);53. if(EqualColor(Pixel,OldColor)54. fill(x,y-1);55. 56. 57. glReadPixels(x-1,y,1,1,GL_RGB,GL_UNSIGNED_BYTE,Pixel);58. if(EqualColor(Pixel,OldColor)59. fill(x-1,y);60. 61. 62. glReadPixels(x+1,y,1,1,GL_RGB,GL_UNSIGNED_BYTE,Pixel);63

7、. if(EqualColor(Pixel,OldColor)64. fill(x+1,y);65. 66. 67. glReadPixels(x,y+1,1,1,GL_RGB,GL_UNSIGNED_BYTE,Pixel);68. if(EqualColor(Pixel,OldColor)69. fill(x,y+1);70. 71. /72. return;73. 74.75. /畫圓函數(shù) 76. void DrawCircle(GLint x,GLint y,GLfloat R,GLint n)77. 78. int i;79. 80. glBegin(GL_LINE_LOOP);81.

8、 for(i=0; i<=n; +i)82. glVertex2f(R*cos(2*Pi/n*i)+x, R*sin(2*Pi/n*i)+y);83. glEnd();84. 85.86. void display(void) 87. 88. glClear(GL_COLOR_BUFFER_BIT) ;89. /畫填充三角形90. glColor3f(0,200,0);91. glBegin(GL_TRIANGLES);92. glVertex3f(150, 50, 0.0);93. glVertex3f(250, 50, 0.0);94. glVertex3f(250,150,0.0)

9、;95. glEnd();96. /畫一個(gè)四角星97. glColor3f(200,0,0);98. glBegin(GL_LINE_LOOP);99. glVertex3f(50, 50, 0.0);100. glVertex3f(75, 60, 0.0);101. glVertex3f(100, 50, 0.0);102. glVertex3f(90, 75, 0.0);103. glVertex3f(100, 100, 0.0);104. glVertex3f(75, 90, 0.0);105. glVertex3f(50, 100, 0.0);106. glVertex3f(60, 7

10、5, 0.0); 107. glEnd();108. /畫一個(gè)多邊形109. glColor3f(0.0, 0.0, 0.9) ;110. DrawCircle(150,100,50,8);111. /畫一個(gè)近似圓112. glColor3f(0.0, 0.9, 0.9) ;113. DrawCircle(300,100,50,1000);114. 115. glFlush();116. 117. 118.119. /鼠標(biāo)點(diǎn)擊120. void MousePlot(GLint button,GLint action,GLint xMouse,GLint yMouse)121. if(butto

11、n=GLUT_LEFT_BUTTON && action=GLUT_DOWN)122. fillx=xMouse;123. filly=WinHeight-yMouse;124. glReadPixels(fillx,filly,1,1,GL_RGB,GL_UNSIGNED_BYTE,&Pixel);125. OldColor0=Pixel0;126. OldColor1=Pixel1;127. OldColor2=Pixel2;128. /填充129. fill(fillx,filly);130. /printf("x:%d,y:%d-R:%d,G:%d,B

12、:%dn",fillx,filly,Pixel0,Pixel1,Pixel2);131. 132. if(button=GLUT_RIGHT_BUTTON && action=GLUT_UP)133. glutPostRedisplay();134. 135. 136.137. void setFillColor(GLint R,GLint G,GLint B)138. fillColor0=R;139. fillColor1=G;140. fillColor2=B;141. 142.143. void ProcessMenu(int value)144. 145.

13、/iMode = value;146. switch (value)147. case 1:setFillColor(255,0,0);break;148. case 2:setFillColor(0,255,0);break;149. case 3:setFillColor(0,0,255);break;150. case 4:setFillColor(255,255,0);break;151. case 5:setFillColor(255,0,255);break;152. case 6:setFillColor(0,255,255);break;153. case 7:setFillC

14、olor(0,0,0);break;154. case 8:setFillColor(255,255,255);break;155. case 9:glutPostRedisplay();break;156. 157. 158. /glutPostRedisplay();159. 160.161. int main(int argc, char *argv)162. 163. glutInit(&argc, argv);164. glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);165. glutInitWindowSize(WinWidth,Wi

15、nHeight);166. glutInitWindowPosition(300, 100);167. glutCreateWindow("顏色填充");168. init();169. 170. /創(chuàng)建菜單并定義菜單回調(diào)函數(shù)/171. /創(chuàng)建填充顏色菜單172. int nGlFillColor = glutCreateMenu(ProcessMenu); 173. glutAddMenuEntry("紅(255,000,000)",1);174. glutAddMenuEntry("綠(000,255,000)",2);175.

16、glutAddMenuEntry("藍(lán)(000,000,255)",3);176. glutAddMenuEntry("黃(255,255,000)",4);177. glutAddMenuEntry("紫(255,000,255)",5);178. glutAddMenuEntry("青(000,255,255)",6);179. glutAddMenuEntry("黑(000,000,000)",7);180. glutAddMenuEntry("白(255,255,255)",8);181. /創(chuàng)建主菜單182. int nMainMenu = glutCreateMenu(ProcessMenu); 183. glutAddSubMenu(&qu

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論