好男人中文资源在线观看,国产午夜草莓视频在线观看,欧美日韩亚洲精品瑜伽裤,www.97干

首頁 - 觀點 - 營銷·管理

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繪制二維動畫

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

分享:
相關文章
主站蜘蛛池模板: 沁阳市| 五大连池市| 金堂县| 曲周县| 鄄城县| 潞西市| 屏边| 尼木县| 伊川县| 大厂| 甘孜| 祁阳县| 娱乐| 方山县| 潢川县| 礼泉县| 高安市| 兴宁市| 旺苍县| 综艺| 呈贡县| 泾源县| 涟水县| 黑山县| 故城县| 罗江县| 峨眉山市| 佛冈县| 高州市| 长岛县| 宁海县| 苏尼特左旗| 元氏县| 盈江县| 林口县| 泊头市| 神木县| 汽车| 政和县| 宁波市| 和硕县|