99热精品2,99在线在线,玖玖资源站无码专区,亚洲综合天堂中文字幕,久久久后入精品,久久精品加勒比二区,曰本卞A片,亚洲人在线,成人区一区二区

首頁 - 觀點(diǎn) - 營銷·管理

Openl繪制二維動(dòng)畫

文章出處:本站| 網(wǎng)站編輯:創(chuàng)同盟 | 發(fā)表時(shí)間:2014-04-26
我要咨詢
分享:

很多學(xué)游戲的人都會(huì)想知道二維動(dòng)畫是怎么出來的呢?現(xiàn)在我就教你們一個(gè)簡單實(shí)用的二維動(dòng)畫算法。

首頁我們需要定義一個(gè)類叫AnimatedSprite里面初始化的參數(shù)有

Openl繪制二維動(dòng)畫

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

Openl繪制二維動(dòng)畫

然后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 = 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(); // 重置當(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(200.0f,200.0f,-5.0f); // 移入屏幕5 個(gè)單位

glPolygonMode(GL_BACK, GL_LINE);   // 設(shè)置反面為線形模式

glPolygonMode(GL_FRONT, GL_FILL); // 設(shè)置正面為填充模式


glFrontFace(GL_CCW);  // 設(shè)置CCW方向?yàn)椤罢妗保?/span>CCWCounterClockWise,逆時(shí)針

//glFrontFace(GL_CW);   // 設(shè)置CW方向?yàn)椤罢妗保?/span>CWClockWise,順時(shí)針

//得出中心點(diǎn)

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();

}

接著我們執(zhí)行這個(gè)函數(shù)開始繪制圖片并且賦予動(dòng)態(tài),然后在opengl圖像繪制函數(shù)調(diào)用該函數(shù)打工造成,一個(gè)完成的動(dòng)態(tài)圖就出來了。

Openl繪制二維動(dòng)畫

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

分享:
温宿县| 西乡县| 黎川县| 阿城市| 定州市| 麻江县| 双城市| 色达县| 靖安县| 凤山市| 泰和县| 延川县| 睢宁县| 永胜县| 伊金霍洛旗| 深水埗区| 临沧市| 大安市| 东兴市| 太仆寺旗| 治县。| 高平市| 南平市| 兰州市| 涿鹿县| 洞头县| 衡阳市| 桐梓县| 临洮县| 方山县| 双鸭山市| 蒙山县| 通江县| 金昌市| 温泉县| 游戏| 肃北| 涿鹿县| 大港区| 出国| 巍山|