资源简介
实现皮球运动动画
一个圆形小球从某竖直高度以横向速度抛出,落地,弹起,最终静止。设弹起后所能上升的高度为上一次最大高度的4/5,实现运动轨迹动画。

代码片段和文件信息
#include
#include
#include
#include
#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 Hlight;
Color mLight mColor;
int cx=30cy=200cr=30;/*定义皮球开始运动时的水平位置,下落高度和体积大小*/
int windowswidth = 850windowshight = 400;/*定义显示框的宽度和高度*/
int xstep=0ystep=0flag=10up=0;
float vh =4g=9.8h=cy;
void Init()
{
float mo;
Vector eye;
mLight.Ir = 210;
mLight.Ig =210;
mLight.Ib =30;/*定义皮球的颜色*/
KaIa=100;
Kd = 0.7;
n = 10;
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(2.0 1.0 3.0 5.0);
glShadeModel(GL_SMOOTH);
}
Color Phong(int x0 int y0 int r int x int y)
{
Vector N;
float zalphathetaKs;
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;
alpha=H.fx*N.fx+H.fy*N.fy+H.fx*N.fz;
if(alpha<0)
alpha=0;
mColor.Ir=KaIa+mLight.Ir*Kd*theta+mLight.Ir*Ks*pow(alphan);
mColor.Ig=KaIa+mLight.Ig*Kd*theta+mLight.Ig*Ks*pow(alphan);
mColor.Ib=KaIa+mLight.Ib*Kd*theta+mLight.Ib*Ks*pow(alphan);
return mColor;
}
void MidCircle(int x0 int y0 int r) /*中点画圆算法定义圆的圆心坐标和半径*/
{
int xydeltaxdeltayd;
x = 0;
y = r;
deltax = 5;
deltay = 5-r-r;
d = 1-r;
glColor3f (1.0f 1.0f 1.0f);
glBegin(GL_POINTS);
glVertex2i (x+x0y+y0);
glVertex2i (-x+x0y+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 {
if(d<0)
{
d += deltax;
deltax += 2;
deltay += 2;
x++;
}
else
{
d += deltay;
deltax += 2;
deltay += 4;
x++;
y--;
}
glVertex2i (x+x0y+y0);
glVertex2i (-x+x0y+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 MidCircleLight(int x0 int y0 int r)
{
int xydeltaxdeltayd;
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(x0y0ri+x0y+y0);
glColor3ub (mColor.Ir mColor.Ig mColor.Ib);
glVertex2i (i+x0y+y0);
glColor3ub (mColor.Ir mColor.Ig mColor.Ib);
glVertex2i (i+x0-y+y0);
}
for(i=-y;i<=y;i++)
{
mColor=Phong(x0y0ri+x0x+y0);
glColor3ub (mColor.Ir mColor.Ig mColor.Ib);
glVertex2i (i+x0x+y0);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 41984 2010-06-30 19:32 运动球\abc.ncb
文件 1238 2010-06-30 19:31 运动球\abc.plg
文件 5490 2010-06-30 19:31 运动球\abc.cpp
文件 3365 2010-06-30 19:31 运动球\abc.dsp
文件 48640 2010-06-30 19:32 运动球\abc.opt
文件 531 2010-06-30 19:32 运动球\abc.dsw
文件 53248 2010-06-30 19:31 运动球\Debug\vc60.pdb
文件 451584 2010-06-30 19:31 运动球\Debug\abc.pdb
文件 19557 2010-06-30 19:31 运动球\Debug\abc.obj
文件 196648 2010-06-30 19:31 运动球\Debug\韩瑞龙.exe
文件 120320 2011-06-19 20:34 运动球\图形学课程设计.doc
目录 0 2010-06-30 19:33 运动球\Debug
目录 0 2010-06-30 19:33 运动球
----------- --------- ---------- ----- ----
942605 13
相关资源
- 计算机图形学 边填充算法实现代码
- 计算机图形学课设 画板
- 简易绘图程序(计算机图形学课程设
- 计算机图形学(openGL)代码
- 图形学集成程序dda、中点算法、多边
- 计算机图形实验(哈尔滨工程大学)
- 计算机图形学-全.rar
- 7-Uath茶壶
- 计算机图形学考试试卷试题6套含3套的
- GPU精粹1-中文版.pdf《GPU精粹:实时图形
- 计算机图形学 基于3D图形开发技术
- 3D游戏与计算机图形学中的数学方法
- 虚拟现实技术文献英文
- 华南理工大学软件学院计算机图形学
- GPU+编程与CG+语言之阳春白雪下里巴人
- 计算机图形学实验 opengl实现太阳系运
- 中国科学技术大学计算机图形学大作
- 计算机图形学的实习
- 计算机图形大作业opengl-物联网.rar
- 计算机图形学 z-buffer
- 计算机图形学经典论文计算机图形学
- 计算机图形学几何工具算法详解
- 广东工业大学 各年 计算机图形学最全
- 交互式计算机图形学 基于WEBGL的自顶
- 清华大学版计算机图形学
- 计算机图形学 边界定义的8连通区域
- 实验一 OpenGL 程序设计基础
- 计算机图形学与几何造型导论 英文版
- 计算机图形学基础教程.docx
- 广东工业大学计算机图形学实验.rar
评论
共有 条评论