實驗一OpenGL直線、圓的繪制_第1頁
實驗一OpenGL直線、圓的繪制_第2頁
實驗一OpenGL直線、圓的繪制_第3頁
實驗一OpenGL直線、圓的繪制_第4頁
實驗一OpenGL直線、圓的繪制_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、實驗一 OpenG直線、圓的繪制實驗一、OpenGLt線、圓的繪制1、實驗?zāi)康?) 了解OpenGL圖形庫的功能和結(jié)構(gòu);2)學(xué)習(xí)了解OpenGL程序的基本結(jié)構(gòu),及常用函數(shù);3 )學(xué)習(xí)使用OpenGL繪制基本圖形(線、圓);2、 實驗內(nèi)容1 )使用OpenGL編寫一個簡單的C+福序,使該程序能夠繪制出 直線。2 )使用OpenGL編寫一個簡單的C+理序,使該程序能夠繪制出圓。3、實驗過程1)在系統(tǒng)上配置好OpenGL勺環(huán)境(頭文件,庫文件,和鏈接庫 文件);2)使用Visual V+6.0 新建一個C+位檔,并創(chuàng)建相應(yīng)的 工程;3)在文檔中引入OpenGL勺頭文件,編輯代碼實現(xiàn)鼠標(biāo)拖動 畫直線,

2、畫圓。4、實驗結(jié)果可單擊鼠標(biāo)左鍵,然后拖動鼠標(biāo)畫出兩條直線,并同時畫出圓;可單擊鼠標(biāo)右鍵,然后拖動鼠標(biāo)畫出兩個圓,并同時畫出直線。 結(jié)果截圖:1.鼠標(biāo)左鍵主要控制繪制的直線或Ope忙酉線和國的繪制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 pEndy

3、)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)34

4、. 35. for(i=pStartx;i=pEndx;i+)36. glVertex2f(i,pStarty);37. 38. else39. 40. for(i=pEndx;i0 & m=1)53. 54. if(pStartxpEndx)55. 56. while(pStartx=0)60. 61. p+=2*m-2;62. pStarty+;63. 64. else65. p+=2*m;66. 67. 68. else69.70.while(pEndx=0)74. 75. p+=2*m-2;76. pEndy+;77. 78. else79. p+=2*m;80. 81. 82.83.

5、 return;84. 85.86. p=-2*m-1;87. if(m=-1)88. 89. if(pStartxpEndx)90. 91. while(pStartx=0)95. 96. p+=-2*m-2;97. pStarty-;98. 99. else100. p+=-2*m;101. 102. 103. else104. 105. while(pEndx=0)109. 110. p+=-2*m-2;111. pEndy-;112. 113. else114. p+=-2*m;115. 116. 117.118. return;119. 120.121. p=2/m-1;122. i

6、f(m1)123. 124. if(pStartypEndy)125. 126. while(pStarty=0)130. 131. p+=2/m-2;132. pStartx+;133. 134. else135. p+=2/m;136.137.138.139.140.141.142.143.144.145.146.147.148.149.150.151.152.153.154.155.156.157.elsewhile(pEndy=0)p+=2/m-2;pEndx+;elsep+=2/m;return;p=-2/m-1;if(pStartypEndy)158.159. while(pSta

7、rty=0)163. 164. p+=-2/m-2;165. pStartx-;166. 167. else168. p+=-2/m;169. 170. 171. else172. 173. while(pEndy=0)177. 178. p+=-2/m-2;179. pEndx-;180.181. else182. p+=-2/m;183. 184. 185. 186.187. /畫圓 /188. / 其他象限繪制189. void CirclePoints(int x,int y)190. /第1象限191. glVertex2f(x,y);192. glVertex2f(y,x);193

8、. /第2象限194. glVertex2f(-x,y);195. glVertex2f(-y,x);196. /第3象限197. glVertex2f(-y,-x);198. glVertex2f(-x,-y);199. /第4象限200. glVertex2f(x,-y);201. glVertex2f(y,-x);202.203. 204. 中點算法畫圓205. void DrawCircle(int cx,int cy,int radis)206.207. glPushMatrix();208. glTranslatef(cx,cy,0);209. glPointSize(l);210

9、. glColor3f(0.5f, 0.5f, 1.0f);211. glBegin(GL_POINTS);212.213. int x,y;214. double p;215. x=0;216. y=radis;217. p=1.25-radis;218. while(x=0)y-;223. 224.225.p+=2.0*(x-y)+5;246.226. 227. else228. p+=2*x+3;229. 230. glEnd();231. glPopMatrix();232. 233.234.235. 繪制坐標(biāo)軸236. void DrawOx()237. glColor3f(0.95

10、, 0.7, 0.8);238. glPointSize(1);239. glBegin(GL_LINES);240. glVertex2f(-winWidth/2,0);241. glVertex2f(winWidth/2,0);242. glVertex2f(0,winHeight/2);243. glVertex2f(0,-winHeight/2);244. glEnd();245. 247. 顯示函數(shù)248. void Display()249. GL_COLOR_BUFFER_BIT(用背景顏色填充)250. glClear(GL_COLOR_BUFFER_BIT);251.252.

11、 DrawOx();253.254. glColor3f(0.0,0.0,1.0);255.256. glBegin(GL_POINTS);257. BresenhamLine(px1, py1, px2, py2);258. Draw_Bresenham(px1, py1,px2,py2);259. glEnd();260. glBegin(GL_POINTS);261. Draw_Bresenham(py1, px1,py2,px2);262. glEnd();263. glBegin(GL_LINES);264. /glVertex2f(px1,py1);265. /glVertex2f

12、(px2,py2);266. /glVertex2f(py1,px1);267. /glVertex2f(py2,px2);268. /glEnd();269.270. DrawCircle(cx,cy,r);271. DrawCircle(cy,cx,r);272.273. / 交換緩沖區(qū)274. glutSwapBuffers();275. glFlush(); 刷新繪圖命令276. 277.278.279. /設(shè)置渲染狀態(tài)(聽起來滿下人,實際上很簡單)280. void SetupRC(void)281. 282. 清除顏色(這里為黑色,為了方便找畫的那個點),可以理解成背景顏色283.

13、 / 和 glColor4f(1.0f,0.0f, 0.0f , 1.0f) 一樣,所有參數(shù)都在0.0到1.0之間,后綴f是表示參數(shù)是浮點型的284. /最后的那個1.0f是透明度,0.0f表示全透明,1.0f是完全不透明285. glClearColor(1.0f, 1.0f, 1.0f,1.0f);286. 287.288. /當(dāng)繪制的窗口大小改變時重新繪制,使繪制的圖形同比例變化,289. /幾乎所有OpenGL序中的這個函數(shù)都是一樣的,所以,放心大膽的拷貝吧290. void ChangeSize(int w, int h)291. 292. winWidth = w;293. win

14、Height = h;294. /設(shè)置觀察視野為窗口大小(用FLASHB面的話來說應(yīng)該叫設(shè)置攝象機視野)295. glViewport(0,0,w,h);296. /重置坐標(biāo)系統(tǒng),指定設(shè)置投影參數(shù)297. glMatrixMode(GL_PROJECTION);298. / 調(diào)用單位矩陣,去掉以前的投影參數(shù)設(shè)置299. glLoadIdentity();300. /設(shè)置投影參數(shù)301. gluOrtho2D(-w/2,w/2,-h/2,h/2);302. 303.304. /鼠標(biāo)點擊305. void MousePlot(GLint button,GLint action,GLintxMous

15、e,GLint yMouse)&306. if(button=GLUT_LEFT_BUTTONaction=GLUT_DOWN)307. px1 = xMouse - winWidth/2;308. py1 = winHeight/2 - yMouse;309. 310. if(button=GLUT_LEFT_BUTTONaction=GLUT_UP)311. px2 = xMouse - winWidth/2;312. py2 = winHeight/2 - yMouse;313. glutPostRedisplay();314. 315. if(button=GLUT_RIGHT_BUT

16、TONaction=GLUT_DOWN)316. cx=xMouse-winWidth/2;317. cy=winHeight/2-yMouse;318. 319. 320. 鼠標(biāo)移動321. void MouseMove(GLint xMouse,GLint yMouse)322. px2 = xMouse - winWidth/2;323. py2 = winHeight/2 - yMouse;324.r=sqrt(pow(xMouse-winWidth/2-cx),2)+pow(winHeight/2-yMouse-cy),2);325. glutPostRedisplay();326.

17、 327.328. /主函數(shù)329. int main(int argc, char* argv)330. 331. glutInit(&argc, argv);332. /設(shè)置顯示模式333. glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB|GLUT_DEPTH);334. /設(shè)置窗口大小像素335. glutInitWindowSize(600, 600);336. /設(shè)置窗口出現(xiàn)在屏幕的位置337.glutInitWindowPosition(300,160);338. /建立一個叫OpenGL的窗口339. glutCreateWindow(OpenGL-Line);340.341. /調(diào)用函數(shù)Display進行繪制342. glutDisplayFunc(Display);343. / 調(diào)用鼠

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論