openl绘制二维动画-九游会ag

ctmon-品牌全网营销落地服务
专注成长型企业互联网品牌推广、询盘、转化
网络营销策划   品牌营销网站   sem竞价托管   seo定制服务   互联网口碑舆论推广

免费互联网品牌营销咨询服务

创同盟 400-606-6638
热门搜索:
当前位置: 九游会ag-九游会入口 » 知识学院» 营销·管理

openl绘制二维动画

文章出处:本站 | 网站编辑:创同盟 | 发表时间:2014-04-26
分享:

很多学游戏的人都会想知道二维动画是怎么出来的呢?现在我就教你们一个简单实用的二维动画算法。

九游会入口首页我们需要定义一个类叫animatedsprite里面初始化的参数有

openl绘制二维动画

分别是图片的xyz坐标,xframenumber, yframenumber为图片的框架,比如1*4的框架

openl绘制二维动画

然后framedelay, totalframes得出这个图像的帧数framedelay比如为4,接着totalframes算出这图像1*4=4的总体框架, xvelocity, yvelocity接着赋予x,y的速度给这图片,char *texturename这块是选择图片文件路径,int width, int height是赋予图片每个分割出来的图片大小。

接着我们运行一个绘制图片函数

void animatedsprite::draw2()

{

float    xstep;

float    ystep;

xstep = 1.0f / xframenumber;

ystep = 1.0f / yframenumber;


//// enable z-buffer

glenable(gl_depth_test);

gldepthmask(true);


//// set the general polygon properties

glcolor4f(1.0f,1.0f,1.0f,1.0f);

glenable(gl_texture_2d);

glblendfunc(gl_src_alpha,gl_one_minus_src_alpha);

glalphafunc(gl_greater,0.05f);

gldisable(gl_cull_face);


glloadidentity(); // 重置当前的模型观察矩阵

glenable(gl_cull_face);

glcullface (gl_back);


if(ablendflag)     glenable(gl_blend);

else                        gldisable(gl_blend);


if(atestflag)      glenable(gl_alpha_test);

else                        gldisable(gl_alpha_test);


frameindex ++;

currentframeindex = frameindex / framedelay % totalframes;

//if(loop != true) {

//   if(frameindex/framedelay >= totalframes )

//       alive = false;

//}



//gltranslatef(200.0f,200.0f,-5.0f); // 移入屏幕5 个单位

glpolygonmode(gl_back, gl_line);   // 设置反面为线形模式

glpolygonmode(gl_front, gl_fill); // 设置正面为填充模式


glfrontface(gl_ccw);  // 设置ccw方向为“正面”,ccwcounterclockwise,逆时针

//glfrontface(gl_cw);   // 设置cw方向为“正面”,cwclockwise,顺时针

//得出中心点

float tx=width/2.0f;

float ty=height/2.0f;


//rotate = 1.800f;

glrotatef(rotate,0.0f,0.0f,1.0f);

//算出框架速度

float yp =(currentframeindex / xframenumber % yframenumber)*ystep;

float ypupper = yp +ystep;


gltranslatef((float) xposition,(float) yposition,0.0f);

glbindtexture(gl_texture_2d, idtexure); // 选择纹理

glpushmatrix();//算出图片的矢量图

glbegin(gl_quads);

gltexcoord2f(xstep * (currentframeindex%xframenumber) ,yp);

glvertex3i(((int)-tx), (int) ty,zposition);

gltexcoord2f(xstep * (currentframeindex%xframenumber),ypupper);

glvertex3i(((int)-tx),(int)-ty,zposition);

gltexcoord2f(xstep * ((currentframeindex%xframenumber)+1),ypupper);

glvertex3i( ((int)tx),(int)-ty,zposition);

gltexcoord2f(xstep * ((currentframeindex%xframenumber)+1),yp);

glvertex3i(((int) tx), (int)ty,zposition);

glend();

glpopmatrix();

}

接着我们执行这个函数开始绘制图片并且赋予动态,然后在opengl图像绘制函数调用该函数打工造成,一个完成的动态图就出来了。

openl绘制二维动画

整体原理就算把图片分块后,轮播每块图片。

关键字:
分享:
相关文章

九游会ag的友情链接:

官方微信
广东省深圳市宝安区宝民一路宝通大厦27楼
+400-606-6638
+0755-32998669
网站地图