<address id="l177t"><form id="l177t"><nobr id="l177t"></nobr></form></address>

    <address id="l177t"><address id="l177t"><nobr id="l177t"></nobr></address></address>

        <address id="l177t"></address>

        <form id="l177t"><th id="l177t"><th id="l177t"></th></th></form><noframes id="l177t"><form id="l177t"></form>
          <form id="l177t"></form>
            <address id="l177t"></address>
            <address id="l177t"><address id="l177t"><listing id="l177t"></listing></address></address><form id="l177t"></form>

            首頁 - 觀點 - 營銷·管理

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

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

            分享:
            相關文章
            97在线观看永久免费视频