C語言300行-投籃_第1頁
C語言300行-投籃_第2頁
C語言300行-投籃_第3頁
C語言300行-投籃_第4頁
C語言300行-投籃_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、#include stdio.h#ifdef _APPLE_#include #else#include #endif#include #include #include #include #include static double a=0;static double b=0.2;static double t=0;static double t1=0;static double v=0;static double i=0;static double m=0;static double n=0;static double p,q,r,r1=1;static void resize(int w

2、idth,int height)/重繪回調(diào)函數(shù) const float ar=(float)width/(float)height; glViewport(0,0,width,height);/利用函數(shù)glViewport定義視區(qū) glMatrixMode(GL_PROJECTION);/投影矩陣 glLoadIdentity();/ 重置坐標(biāo)系統(tǒng),使投影變換復(fù)位 glFrustum(-ar,ar,-1.0,1.0,2.0,100.0);/利用函數(shù)glFrustum定義修剪區(qū) glMatrixMode(GL_MODELVIEW); glLoadIdentity();static void di

3、splay(void)/顯示回調(diào) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);/清除顏色緩沖區(qū)和深度緩沖區(qū) t=t+t1*0.0001; glColor3d(1,0.6,0.6);/畫圖顏色灰紅/繪制一個實(shí)心球,默認(rèn)原點(diǎn)在屏幕中心與照相機(jī)重合 glPushMatrix(); glTranslated(-3+0.5*cos(a),-0.6+0.5*sin(a),-5); glRotated(0,0,0,0); glutSolidSphere(b,16,16); glPopMatrix(); glColor3d(1,0,0);/畫圖顏色紅/

4、繪制一個實(shí)心球,默認(rèn)原點(diǎn)在屏幕中心與照相機(jī)重合 glPushMatrix(); glTranslated(-3+t*cos(a)*v*t1,-0.6+(t*sin(a)*v-45*t*t)*t1,-5); glRotated(0,0,0,0); glutSolidSphere(0.2*r1,16,16); glPopMatrix(); glColor3d(1,1,1);/畫圖顏色灰/繪制一個線框圓環(huán) glPushMatrix(); glTranslated(m+2.3,n-0.6,-5); glRotated(100,1,0,0); glRotated(7.5,0,1,0); glutWire

5、Torus(0.1*r1,0.6,16,16); glPopMatrix(); if(pow(3-t*cos(a)*v*t1+m+2.3,2)+pow(0.6-(t*sin(a)*v-45*t*t)*t1+n-0.6,2)0.024) t=t-t1*0.0001; r1=3.5; else r1=1; for(p=-3.5,q=0.5;p3.6;p=p+0.5) if(pow(3-t*cos(a)*v*t1+p,2)+pow(0.6-(t*sin(a)*v-45*t*t)*t1+q,2)0.2)r=0.4; else r=0.05; glColor3d(0,0,0);/畫圖顏色黑 /繪制一個線

6、框圓環(huán) glPushMatrix(); glTranslated(p,q,-5); glRotated(t*5000,0,1,0); glutWireTorus(r,0.15,16,16); glPopMatrix(); for(p=-3.5,q=0;p3.6;p=p+0.5) if(pow(3-t*cos(a)*v*t1+p,2)+pow(0.6-(t*sin(a)*v-45*t*t)*t1+q,2)0.2)r=0.4; else r=0.05; glColor3d(0,0,0);/畫圖顏色黑 /繪制一個線框圓環(huán) glPushMatrix(); glTranslated(p,q,-5); g

7、lRotated(t*5000,0,1,0); glutWireTorus(r,0.15,16,16); glPopMatrix(); for(p=-3.5,q=1;p3.6;p=p+0.5) if(pow(3-t*cos(a)*v*t1+p,2)+pow(0.6-(t*sin(a)*v-45*t*t)*t1+q,2)0.2)r=0.4; else r=0.05; glColor3d(0,0,0);/畫圖顏色黑 /繪制一個線框圓環(huán) glPushMatrix(); glTranslated(p,q,-5); glRotated(t*5000,0,1,0); glutWireTorus(r,0.1

8、5,16,16); glPopMatrix(); glutSwapBuffers();/交換緩沖區(qū)static void key(unsigned char key, int x, int y)/鍵盤回調(diào)函數(shù) switch(key) case 27:/Esc鍵的ASCII碼為27 case 13:/回車的ASCII碼為13 exit(0); break; case 43:/加號的ASCII碼為43 if (a0) a=a-0.1; break; case 49:/1的ASCII碼為49 v=4; break; case 50:/2的ASCII碼為50 v=8; break; case 51:/

9、3的ASCII碼為51 v=12; break; case 52:/4的ASCII碼為52 v=16; break; case 53:/5的ASCII碼為53 v=20; break; case 54:/6的ASCII碼為54 v=24; break; case 55:/7的ASCII碼為55 v=28; break; case 56:/8的ASCII碼為56 v=32; break; case 57:/9的ASCII碼為57 v=36; break; case 32:/空格的ASCII碼為32 if(t0.1) t1=1; b=0.001; else b=0.2; v=0; t1=0; t=

10、0; m=0; n=0; break; case 97:/a的ASCII碼為97 m=m-0.2; break; case 119:/w的ASCII碼為119 n=n+0.2; break; case 100:/d的ASCII碼為100 m=m+0.2; break; case 115:/s的ASCII碼為115 n=n-0.2; break; glutPostRedisplay();/標(biāo)記當(dāng)前窗口需要重新繪制static void idle(void)/空閑回調(diào)函數(shù) glutPostRedisplay();/標(biāo)記當(dāng)前窗口需要重新繪制/定義一個默認(rèn)的光源的屬性值,使用數(shù)組來存放光源的顏色值co

11、nst GLfloat light_ambient = 0.0f, 0.0f, 0.0f, 1.0f ;/光源中環(huán)境光的顏色,黑色,第四個分量1.0表示不透明。const GLfloat light_diffuse = 1.0f, 1.0f, 1.0f, 1.0f ;/光源中漫射光的顏色,白色const GLfloat light_specular = 1.0f, 1.0f, 1.0f, 1.0f ;/光源中鏡面反射光的顏色const GLfloat light_position = 2.0f, 5.0f, 5.0f, 0.0f ;/定向光源,指定了光源的方向/定義材質(zhì)屬性值,使用數(shù)組來存放材

12、質(zhì)的顏色值const GLfloat mat_ambient = 0.7f, 0.7f, 0.7f, 1.0f ; /材質(zhì)的環(huán)境顏色const GLfloat mat_diffuse = 0.8f, 0.8f, 0.8f, 1.0f ; /材質(zhì)的漫射光顏色const GLfloat mat_specular = 1.0f, 1.0f, 1.0f, 1.0f ;/材質(zhì)鏡面反射光的顏色const GLfloat high_shininess = 100.0f ;/材質(zhì)的鏡面反射指數(shù)int main(int argc, char *argv) MessageBox(NULL,+、-控制角度n19控制

13、速度nwasd控制框移動n按空格發(fā)射,介紹,MB_OK); glutInit(&argc, argv);/對GLUT 進(jìn)行初始化 glutInitWindowPosition(15,15);/窗口位置 glutInitWindowSize(960,640);/窗口大小 glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);/使用雙緩沖區(qū)窗口,窗口使用深度緩存 glutCreateWindow(GLUT Shapes);/參數(shù)將被作為窗口的標(biāo)題 glutReshapeFunc(resize); glutDisplayFunc(displ

14、ay); glutKeyboardFunc(key); glutIdleFunc(idle);/注冊回調(diào)函數(shù) glClearColor(0.1f,0.1f,1.0f,1);/參數(shù)可以在0、1改動 glEnable(GL_CULL_FACE); glCullFace(GL_BACK); glEnable(GL_DEPTH_TEST);/ 開啟剔除操作效果 glDepthFunc(GL_LESS);/ 指定深度緩沖比較值,深度值小于參考值,則通過 glEnable(GL_LIGHT0);/啟用0號光源 glEnable(GL_NORMALIZE);/ 啟用自動單位化法向量 glEnable(GL_

15、COLOR_MATERIAL);/啟用材質(zhì)顏色 glEnable(GL_LIGHTING);/啟用光照/設(shè)置0號光源的特性值 glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); glLightfv(GL_LIGHT0, GL_POSITION, light_position);/設(shè)置材質(zhì)的特性值,本題只設(shè)置了物體前面的材質(zhì)值 glMaterialfv(GL_F

溫馨提示

  • 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

提交評論