- 1、本文档共17页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
皮球运动动画
设计方案
圆皮球从某竖直高度以横向速度抛出,落地,弹起,最终静止。设弹起后所能上升的高度为上一次最大高度的4/5,实现运动轨迹动画动画是将静止的画面变为动态的艺术实现由静止到动态,主要是靠人眼的视觉残留效应利用人的这种视觉生理特性可制作出具有高度想象力和表现力的动画影片 void MidCircle(int x0, int y0, int r)定义圆心的坐标和圆半径,用mLight.Ir, mLight.Ig, mLight.Ib来定义圆的颜色,glClearColor定义显示框的背景颜色,int cx=100,cy=300,cr=20定义圆开始运动时的水平位置,垂直高度和体积大小,glClearColor定义显示框的背景颜色,int windowswidth = 1000,windowshight = 500定义显示框的宽度和高度。 void Init()用来初始化,void myDisplay()用来显示,glLoadIdentity()为加载身份,void RenderScene(void)为渲染现场,void TimerFunction(int value)为计时器功能。
程序流程图
三、程序清单
#include GL/glut.h
#include stdio.h
#include stdlib.h
#include math.h
#define NO_LIGHT 1
#define LIGHT 2
bool bLight = false;
struct Vector
{
float fx, fy, fz;
};
struct Color
{
float Ir, Ig, Ib;/*定义皮球的颜色*/
};
float KaIa;
float Kd, n;
Vector H,light;
Color mLight, mColor;
int cx=100,cy=300,cr=20;/*定义皮球开始运动时的水平位置,下落高度和体积大小*/
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 = 200;
mLight.Ig =20;
mLight.Ib =200;/*定义皮球的颜色*/
KaIa=100;
Kd = 0.7;
n = 20;
light.fx=0.10;light.fy=0.50;
light.fz = sqrt(1-(light.fx*light.fx)-(light.fy*light.fy));
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;
mo=sqrt(H.fx*H.fx+H.fy*H.fy+H.fz*H.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(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(theta0)
theta=0;
alpha=H.fx*N.fx+H.fy*N.fy+H.fx*N.fz;
if(alpha0)
alpha=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.
文档评论(0)