




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、河南理工大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院課程設(shè)計(jì)報告200 9 201 0 學(xué)年第 二 學(xué)期課程名稱 計(jì)算機(jī)圖形學(xué) 設(shè)計(jì)題目 皮球運(yùn)動動畫 學(xué)生姓名 魏 鴻 博 學(xué) 號 310719010421 專業(yè)班級 計(jì)算機(jī)07-4 指導(dǎo)教師 王 玉 昆 2010 年 6 月 23 日皮球運(yùn)動動畫一、 設(shè)計(jì)方案圓皮球從某豎直高度以橫向速度拋出,落地,彈起,最終靜止。設(shè)彈起后所能上升的高度為上一次最大高度的4/5,實(shí)現(xiàn)運(yùn)動軌跡動畫。 整個設(shè)計(jì)包括兩個方面,一是掌握動畫的基本原理,二是圓的繪制。動畫是將靜止的畫面變?yōu)閯討B(tài)的藝術(shù)。實(shí)現(xiàn)由靜止到動態(tài),主要是靠人眼的視覺殘留效應(yīng)。利用人的這種視覺生理特性可制作出具有高度想象
2、力和表現(xiàn)力的動畫影片。 動畫中的皮球要用到中點(diǎn)畫圓算法畫圓, void MidCircle(int x0, int y0, int r)定義圓心的坐標(biāo)和圓半徑,用mLight.Ir, mLight.Ig, mLight.Ib來定義圓的顏色,glClearColor定義顯示框的背景顏色,int cx=100,cy=300,cr=20定義圓開始運(yùn)動時的水平位置,垂直高度和體積大小,glClearColor定義顯示框的背景顏色,int windowswidth = 1000,windowshight = 500定義顯示框的寬度和高度。 void Init()用來初始化,void myDisplay(
3、)用來顯示,glLoadIdentity()為加載身份,void RenderScene(void)為渲染現(xiàn)場,void TimerFunction(int value)為計(jì)時器功能。二、 程序流程圖floatmo;returnmColor;mColor.Ir=KaIa+mLight.Ir*Kd*theta+mLight.Ir*Ks*pow(alpha,n);alpha<0alpha=H.fx*N.fx+H.fy*N.fy+H.fx*N.fz;theta<0VectorN;d+=deltax;NOglVertex2i(x+x0,y+y0);d<0glEnd();x<yi
4、ntx,y,deltax,deltay,d;mColor=Phong(x0,y0,r,i+x0,x+y0);WHILEmColor=Phong(x0,y0,r,i+x0,y+y0);i+i<=yi=-yi+i<=xi=-xintx,y,deltax,deltay,d;glClear(GL_COLOR_BUFFER_BIT);glViewport(0,0,(GLsizei)w,(GLsizei)h);glClear(GL_COLOR_BUFFER_BIT);flag=1;YESt=sqrt(2*h/g);Multiflag=1cy-cr>0&&cx+cr<
5、windowswidth&&up=0h>1floatt=0,vv,s,hv;return0;glutInit(&argc,argv);三、程序清單#include <GL/glut.h>#include <stdio.h>#include <stdlib.h>#include <math.h>#define NO_LIGHT 1#define LIGHT 2bool bLight = false;struct Vectorfloat fx, fy, fz;struct Colorfloat Ir, Ig, Ib;/*
6、定義皮球的顏色*/;float KaIa;float Kd, n;Vector H,light;Color mLight, mColor;int cx=100,cy=300,cr=20;/*定義皮球開始運(yùn)動時的水平位置,下落高度和體積大小*/int windowswidth = 1000,windowshight = 500;/*定義顯示框的寬度和高度*/int xstep=0,ystep=0,flag=10,up=0;float vh =4,g=9.8,h=cy;void Init()float mo;Vector eye;mLight.Ir = 20;mLight.Ig =200;mLig
7、ht.Ib =20;/*定義皮球的顏色*/KaIa=100;Kd = 0.7;n = 20;light.fx=0.10;light.fy=0.50;eye.fx=1;eye.fy=0;eye.fz=1;H.fx=light.fx+eye.fx;H.fy=light.fy+eye.fy;H.fz=light.fz+eye.fz;H.fx=(H.fx/mo);H.fy=(H.fy/mo);H.fz=(H.fz/mo);H.fx=(H.fx/mo);H.fy=(H.fy/mo);H.fz=(H.fz/mo);glClearColor(1.0, 1.0, 1.0, 0.0);glShadeModel(
8、GL_SMOOTH);Color Phong(int x0, int y0, int r, int x, int y)Vector N;float z,alpha,theta,Ks;Ks=1.0-Kd;z=sqrt(float)(r*r-(x-x0)*(x-x0)-(y-y0)*(y-y0);N.fx=(x-x0)*1.0/r;N.fy=(y-y0)*1.0/r;N.fz = z*1.0/r;theta = N.fx * light.fx + N.fy * light.fy + N.fz * light.fz;if(theta<0)theta=0;if(alpha<0)alpha=
9、0;mColor.Ir=KaIa+mLight.Ir*Kd*theta+mLight.Ir*Ks*pow(alpha,n);mColor.Ig=KaIa+mLight.Ig*Kd*theta+mLight.Ig*Ks*pow(alpha,n);mColor.Ib=KaIa+mLight.Ib*Kd*theta+mLight.Ib*Ks*pow(alpha,n);return mColor;void MidCircle(int x0, int y0, int r) /*中點(diǎn)畫圓算法定義圓的圓心坐標(biāo)和半徑*/int x,y,deltax,deltay,d;x = 0;y = r;deltax =
10、5;deltay = 5-r-r;d = 1-r;glColor3f (1.0f, 1.0f, 1.0f); glBegin(GL_POINTS);glVertex2i (x+x0,y+y0);glVertex2i (-x+x0,y+y0);glVertex2i (-x+x0,-y+y0);glVertex2i (x+x0,-y+y0);glVertex2i (y+y0, x+x0);glVertex2i (y+y0, -x+x0);glVertex2i (-y+y0, -x+x0);glVertex2i (-y+y0, x+x0);while(x<y)if(d<0)d += de
11、ltax;deltax += 2;deltay += 2;x+;elsed += deltay;deltax += 2;deltay += 4;x+;y-;glVertex2i (x+x0,y+y0);glVertex2i (-x+x0,y+y0);glVertex2i (-x+x0,-y+y0);glVertex2i (x+x0,-y+y0);glVertex2i (y+y0, x+x0);glVertex2i (y+y0, -x+x0);glVertex2i (-y+y0, -x+x0);glVertex2i (-y+y0, x+x0);glEnd();void MidCircleLigh
12、t(int x0, int y0, int r)int x,y,deltax,deltay,d;x = 0;y = r;deltax = 3;deltay = 5-r-r;d = 1-r;int i=0; glBegin(GL_POINTS);for( i=-x;i<=x;i+)mColor=Phong(x0,y0,r,i+x0,y+y0);glColor3ub (mColor.Ir, mColor.Ig, mColor.Ib);glVertex2i (i+x0,y+y0);glColor3ub (mColor.Ir, mColor.Ig, mColor.Ib);glVertex2i (
13、i+x0,-y+y0);for(i=-y;i<=y;i+)mColor=Phong(x0,y0,r,i+x0,x+y0);glColor3ub (mColor.Ir, mColor.Ig, mColor.Ib); glVertex2i (i+x0,x+y0);glColor3ub (mColor.Ir, mColor.Ig, mColor.Ib); glVertex2i (i+x0,-x+y0);while(x<y)if(d<0)d += deltax;deltax += 2;deltay += 2;x+;elsed += deltay;deltax += 2;deltay
14、+= 4;x+;y-;for(i=-x;i<=x;i+)mColor=Phong(x0,y0,r,i+x0,y+y0);glColor3ub (mColor.Ir, mColor.Ig, mColor.Ib); glVertex2i (i+x0,y+y0);glColor3ub (mColor.Ir, mColor.Ig, mColor.Ib); glVertex2i (i+x0,-y+y0);for(i=-y;i<=y;i+)mColor=Phong(x0,y0,r,i+x0,x+y0);glColor3ub (mColor.Ir, mColor.Ig, mColor.Ib);
15、glVertex2i (i+x0,x+y0);glColor3ub (mColor.Ir, mColor.Ig, mColor.Ib); glVertex2i (i+x0,-x+y0);glEnd();void myDisplay() /*用此函數(shù)來顯示*/glClear(GL_COLOR_BUFFER_BIT);glColor3f (0.0f, 0.0f, 1.0f); MidCircleLight(cx, cy, cr);glFlush();void Reshape(int w, int h) /*加載身份*/glViewport(0, 0, (GLsizei) w, (GLsizei)
16、h);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(0.0, (GLdouble) w, 0.0, (GLdouble) h);void RenderScene(void) /*渲染現(xiàn)場*/glClear(GL_COLOR_BUFFER_BIT);glColor3f(1.0f, 0.0f, 0.0f);/*清空命令緩沖區(qū)并交換幀緩存*/glutSwapBuffers();void TimerFunction(int value) /*定義計(jì)時器功能*/*處理到達(dá)窗口邊界的球形,使之反彈*/float t=0,vv,s,hv;if
17、 (h>1)if(cy-cr>0 && cx+cr<windowswidth && up = 0)t =sqrt(2*h/g);vv = g*t/5;/*hv = 0.5*g*g*t; s= vh*t;*/cx += vh;cy -= vv;else if(cy-cr<=0)flag = 1;up =1 ;if(flag = 1)h=4.0/5.0*h;flag = 0 ;printf("%d,%d,%d,%dn",up,flag,h,cy-cr);if(cy-cr<=h && up = 1)t
18、= sqrt(2*h/g);vv = sqrt(2*g*h)/8;/*hv= vv*t - 0.5*g*t*t; s = vh *t;*/cy +=vv;cx +=vh;else if(cy-cr>=h)up = 0 ;/*用新坐標(biāo)重新繪圖*/ glutPostRedisplay();glutDisplayFunc(myDisplay);glutTimerFunc(33,TimerFunction, 1);int main(int argc, char *argv)glutInit(&argc, argv);glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);glutInitWindowPosition(100, 100);glutInitWindowSize(windowswidth,windowshight );glutCreateWindow("皮球-魏鴻博-31070910421");Init();glutDisplayFunc(RenderScene);glutTimerFunc(33, TimerFunction, 1);glutReshapeFunc(Reshape);glut
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 45224-2025智慧城市城市交通基礎(chǔ)設(shè)施智能監(jiān)測技術(shù)要求
- 汽車租賃合同終止格式合同
- 公路貨物運(yùn)輸合同風(fēng)險防范與應(yīng)對
- 戰(zhàn)略合作融資合同樣本
- 度畜牧產(chǎn)品購銷合同協(xié)議
- 12《祝?!方虒W(xué)設(shè)計(jì)2024-2025學(xué)年高一語文下學(xué)期(必修下冊)
- 養(yǎng)老院護(hù)理服務(wù)合同樣本
- 商業(yè)拓展合作合同轉(zhuǎn)讓合同
- 辦公用品年度采購合同范本
- 婚前合同關(guān)于子女撫養(yǎng)費(fèi)的責(zé)任劃分
- 2025年供應(yīng)鏈管理公司合作項(xiàng)目協(xié)議書
- 2025年度度假村景觀設(shè)計(jì)及施工一體化合同
- 《如何規(guī)劃養(yǎng)禽場》課件
- 2024-2025學(xué)年云南省昆明市盤龍區(qū)三年級(上)期末數(shù)學(xué)試卷(含答案)
- 物業(yè)公司行政人事部職責(zé)
- 醫(yī)療健康行業(yè)保密免責(zé)協(xié)議書
- 《設(shè)計(jì)思維與方法》課件
- 第一課走進(jìn)人工智能 說課稿 2023-2024學(xué)年浙教版(2023)初中信息技術(shù)八年級下冊
- 體檢中心前臺接待流程
- 2024年大唐集團(tuán)招聘筆試試題及答案-
- 徐州生物工程職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試參考試題及答案
評論
0/150
提交評論