很多學(xué)游戲的人都會(huì)想知道二維動(dòng)畫是怎么出來的呢?現(xiàn)在我就教你們一個(gè)簡單實(shí)用的二維動(dòng)畫算法。
首頁我們需要定義一個(gè)類叫AnimatedSprite里面初始化的參數(shù)有

分別是圖片的xyz坐標(biāo),xFrameNumber, yFrameNumber為圖片的框架,比如1*4的框架

然后FrameDelay, totalFrames得出這個(gè)圖像的幀數(shù)FrameDelay比如為4,接著totalFrames算出這圖像1*4=4的總體框架, xVelocity, yVelocity接著賦予x,y的速度給這圖片,char *textureName這塊是選擇圖片文件路徑,int width, int height是賦予圖片每個(gè)分割出來的圖片大小。
接著我們運(yùn)行一個(gè)繪制圖片函數(shù)
void AnimatedSprite::Draw2()
{
float xStep;
float yStep;
xStep =
yStep =
//// Enable z-buffer
glEnable(GL_DEPTH_TEST);
glDepthMask(TRUE);
//// Set the general polygon properties
glColor
glEnable(GL_TEXTURE_2D);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
glAlphaFunc(GL_GREATER,
glDisable(GL_CULL_FACE);
glLoadIdentity(); // 重置當(dāng)前的模型觀察矩陣
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(
glPolygonMode(GL_BACK, GL_LINE); // 設(shè)置反面為線形模式
glPolygonMode(GL_FRONT, GL_FILL); // 設(shè)置正面為填充模式
glFrontFace(GL_CCW); // 設(shè)置CCW方向?yàn)椤罢妗保?/span>CCW即CounterClockWise,逆時(shí)針
//glFrontFace(GL_CW); // 設(shè)置CW方向?yàn)椤罢妗保?/span>CW即ClockWise,順時(shí)針
//得出中心點(diǎn)
float tX=Width/
float tY=Height/
//Rotate =
glRotatef(Rotate,
//算出框架速度
float yp =(currentFrameIndex / xFrameNumber % yFrameNumber)*yStep;
float ypUpper = yp +yStep;
glTranslatef((float) xPosition,(float) yPosition,
glBindTexture(GL_TEXTURE_2D, idTexure); // 選擇紋理
glPushMatrix();//算出圖片的矢量圖
glBegin(GL_QUADS);
glTexCoord
glVertex3i(((int)-tX), (int) tY,zPosition);
glTexCoord
glVertex3i(((int)-tX),(int)-tY,zPosition);
glTexCoord
glVertex3i( ((int)tX),(int)-tY,zPosition);
glTexCoord
glVertex3i(((int) tX), (int)tY,zPosition);
glEnd();
glPopMatrix();
}
接著我們執(zhí)行這個(gè)函數(shù)開始繪制圖片并且賦予動(dòng)態(tài),然后在opengl圖像繪制函數(shù)調(diào)用該函數(shù)打工造成,一個(gè)完成的動(dòng)態(tài)圖就出來了。

整體原理就算把圖片分塊后,輪播每塊圖片。