首页 - 观点 - 营销·管理

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绘制二维动画

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

分享:
相关文章