青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Shuffy

不斷的學習,不斷的思考,才能不斷的進步.Let's do better together!
posts - 102, comments - 43, trackbacks - 0, articles - 19

《基于MFC的OpenGL編程》Part 7 Animation

Posted on 2010-03-31 20:34 Shuffy 閱讀(334) 評論(0)  編輯 收藏 引用 所屬分類: MFC,OpenGL
      本文中將對5篇文章的太陽系模型進行修改,加入一些動畫效果。此外還會加入顯示幀速率的代碼。

      加入動畫效果最容易的方法是響應WM_TIMER消息,在其消息處理函數(shù)中改變一些參數(shù)值,比如每過多少毫秒就旋轉一定的角度,并且重繪場景。

Frame Rate

Frame rate is nothing but the number of frames that can be rendered per second. The higher this rate, the smoother the animation. In order to calculate the frame rate we retrieve the system time (using the Windows multimedia API function timeGetTime()) before the rendering is performed and after the buffer is swapped. The difference between the two values is the elapsed time to render one frame. Thus we can calculate the frame rate for a given application.

1,我們需要調(diào)用timeGetTime()函數(shù),因此在stdafx.h中加入:

#include <mmsystem.h>        // for MM timers (you'll need WINMM.LIB)

并且Link—>Object/library modules中加入winmm.lib

2,為了計算繪制用時,在CCY457OpenGLView.h中加入如下變量:

    //For elapsed timing calculations
    DWORD m_StartTime, m_ElapsedTime, m_previousElapsedTime;    
    CString m_WindowTitle;    
//Window Title
    int DayOfYear;
    
int HourOfDay;

并在構造函數(shù)中進行初始化:

CCY457OpenGLView::CCY457OpenGLView()
{
    DayOfYear 
= 1;
    HourOfDay 
= 1;
}

3,為了計算幀速率,修改OnCreate函數(shù),在其中獲取窗口標題,從標題中去掉”Untitled”字樣,并啟動定時器;

4,同樣為了計算幀速率,修改OnDraw函數(shù)如下,在其中用glPushMatrix glPopMatrixRenderScene函數(shù)包裹起來,從而確保動畫會正確運行。在SwapBuffers調(diào)用后我們調(diào)用PostRenderScene來顯示幀速率信息到窗口標題。

void CCY457OpenGLView::OnDraw(CDC* pDC)
{
    CCY457OpenGLDoc
* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    
// Get the system time, in milliseconds.
    m_ElapsedTime = ::timeGetTime(); // get current time
    if ( ElapsedTimeinMSSinceLastRender() < 30 )
        
return
    
// Clear out the color & depth buffers
    ::glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
    glPushMatrix();
        RenderScene();
    glPopMatrix();
    
// Tell OpenGL to flush its pipeline
    ::glFinish();
    
// Now Swap the buffers
    ::SwapBuffers( m_pDC->GetSafeHdc() );
    
//Perform Post Display Processing
    
// Only update the title every 15 redraws (this is about
    
// every 1/2 second)
    PostRenderScene();
    
// the very last thing we do is to save
    
// the elapsed time, this is used with the
    
// next elapsed time to calculate the
    
// elapsed time since a render and the frame rate
    m_previousElapsedTime = m_ElapsedTime;
}

4,在CCY457OpenGLView類中加入下述成員函數(shù),用來顯示幀速率信息到窗口標題

//////////////////////////////////////////////////////////////////////////////
// PostRenderScene
// perform post display processing
// The default PostRenderScene places the framerate in the
// view's title. Replace this with your own title if you like.
void CCY457OpenGLView::PostRenderScene( void )
{
    
// Only update the title every 15 redraws (this is about
    
// every 1/2 second)
    static int updateFrame = 15;
    
if (16 > ++updateFrame )
        
return;
    updateFrame 
= 0;
    
char string[256];
    _snprintf( 
string200"%s ( %d Frames/sec )",
        (
const char*)m_WindowTitle, FramesPerSecond() );
    GetParentFrame()
->SetWindowText( string );
}
//////////////////////////////////////////////////////////////////////////////
// FramesPerSecond
// fetch frame rate calculations
int CCY457OpenGLView::FramesPerSecond( void )
{
    
double eTime = ElapsedTimeinMSSinceLastRender();
    
if ( 0 == (int)eTime )
        
return 0;
    
return (int)(1000/(int)eTime);
}
DWORD ElapsedTimeinMSSinceLastStartup()
{
    
return(m_ElapsedTime - m_StartTime);
}
DWORD ElapsedTimeinMSSinceLastRender()
{
    
return(m_ElapsedTime - m_previousElapsedTime);
}

5,在OnTimer函數(shù)中,通過增加變量DayOfYear HourOfDay的值來控制地球和月球的位置,并且調(diào)用InvalidateRect來刷新界面。

void CCY457OpenGLView::OnTimer(UINT nIDEvent) 
{
    
if(DayOfYear < 365)
        DayOfYear
++;
    
else
        DayOfYear 
= 1;
    
if(HourOfDay < 365)
        HourOfDay
++;
    
else
        HourOfDay 
= 1;
    InvalidateRect(NULL, FALSE);    
    CView::OnTimer(nIDEvent);
}

6,在RenderScene中加入繪制代碼:

void CCY457OpenGLView::RenderScene ()
{
//繪制函數(shù)
    glTranslatef(0.0f,0.0f,-5.0f);
    
//Draw the Sun
    glutWireSphere(1.0f,20,20);
    
//Rotate the Planet in its orbit
    glRotatef((GLfloat) (360.0*DayOfYear)/365.00.0f1.0f0.0f);
    glTranslatef(
4.0f,0.0f,0.0f);
    glPushMatrix();
        
//Rotate the Planet in its orbit
        glRotatef((GLfloat)(360*HourOfDay)/24.00.0f,1.0f,0.0f);
        
//Draw the Planet
        glutWireSphere(0.2f,20,20);
    glPopMatrix();
    glRotatef((GLfloat) (
360.0*12.5*DayOfYear)/365.00.0f1.0f0.0f);
    glTranslatef(
0.5f,0.0f,0.0f);
    
//Draw the Moon
    glutWireSphere(0.01f,20,20);
}

 

作者:洞庭散人

出處:http://phinecos.cnblogs.com/    

本文版權歸作者和博客園共有,歡迎轉載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
原文鏈接:http://www.cnblogs.com/phinecos/archive/2008/11/05/1327558.html
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产偷国产偷亚洲高清97cao| 在线一区日本视频| 99精品欧美一区| 在线电影欧美日韩一区二区私密| 亚洲国产天堂网精品网站| 久久久久久久波多野高潮日日| 亚洲已满18点击进入久久 | 麻豆国产精品777777在线 | 亚洲精品乱码久久久久久久久| 久久精品国产亚洲一区二区三区| 欧美一区二区三区四区在线观看地址 | 亚洲精选在线| 国产精品99久久久久久www| 亚洲欧美成人| 免费成人高清视频| 国产精品卡一卡二| 一区二区亚洲精品| 夜夜精品视频一区二区| 久久成人这里只有精品| 欧美激情在线狂野欧美精品| 中文欧美在线视频| 性欧美大战久久久久久久久| 毛片一区二区三区| 夜夜嗨av一区二区三区四区| 欧美在线视频日韩| 欧美日韩日韩| 久久综合一区| 欧美激情精品久久久久久黑人| 亚洲毛片av在线| 欧美一区二区三区四区在线| 免费观看成人鲁鲁鲁鲁鲁视频| 国产精品久久久久久久第一福利| 在线看片欧美| 午夜一级久久| 日韩视频欧美视频| 久久婷婷亚洲| 国产私拍一区| 亚洲免费视频一区二区| 亚洲国产精品久久人人爱蜜臀| 欧美一区二区三区精品| 国产精品白丝jk黑袜喷水| 亚洲激情av| 久久青草欧美一区二区三区| 亚洲一区精品在线| 欧美日韩在线直播| 亚洲精品社区| 欧美大学生性色视频| 欧美成人国产va精品日本一级| 一区二区三区成人精品| 欧美成人日本| 亚洲电影在线观看| 久久人人97超碰精品888| 亚洲制服丝袜在线| 国产精品久久久久永久免费观看| 亚洲乱码视频| 亚洲区欧美区| 欧美久久成人| 日韩网站在线观看| 91久久久一线二线三线品牌| 欧美成人精品h版在线观看| 在线观看视频一区二区欧美日韩| 久久全球大尺度高清视频| 欧美专区福利在线| 精品91久久久久| 久久婷婷丁香| 玖玖国产精品视频| 亚洲精品少妇30p| 亚洲精品午夜精品| 欧美性猛交一区二区三区精品| 中文在线不卡| 亚洲一区国产视频| 国内精品久久久久久久97牛牛| 久久久久久网址| 毛片精品免费在线观看| 亚洲免费黄色| 在线综合亚洲欧美在线视频| 国产精品视频免费观看| 久久全国免费视频| 欧美高潮视频| 午夜精品久久久久久久99热浪潮 | 亚洲国产片色| 欧美成人午夜视频| 亚洲精品乱码久久久久久蜜桃91| 欧美劲爆第一页| 一区二区成人精品 | 国产精品黄色在线观看| 欧美一区二区三区在线看| 久久国产直播| 亚洲美女中文字幕| 亚洲一区二区三区乱码aⅴ| 国产综合精品一区| 亚洲国产一区二区在线| 国产九区一区在线| 欧美黑人在线观看| 国产精品三级久久久久久电影| 久久精品国产综合精品| 欧美大片在线影院| 欧美中文字幕视频| 欧美激情精品久久久久久| 欧美日韩精品在线播放| 久久精品女人| 欧美精品一区二区在线播放| 欧美在线精品免播放器视频| 蜜臀久久久99精品久久久久久| 午夜精品成人在线视频| 麻豆精品一区二区综合av| 欧美一级淫片aaaaaaa视频| 免费视频一区二区三区在线观看| 午夜精品在线看| 欧美激情 亚洲a∨综合| 久久精品导航| 国产精品青草久久| 亚洲免费激情| 亚洲日本va午夜在线电影 | 欧美日韩日日夜夜| 欧美1区2区| 狠狠爱综合网| 亚洲欧美欧美一区二区三区| 日韩一级在线观看| 久久视频这里只有精品| 欧美伊人久久久久久午夜久久久久| 欧美激情一区三区| 欧美成人在线网站| 精品999久久久| 亚洲欧美伊人| 性欧美xxxx大乳国产app| 欧美日韩亚洲综合| 亚洲三级视频| 一区二区久久| 欧美精品黄色| 亚洲激情视频网| 亚洲日韩视频| 欧美激情第1页| 亚洲激情av| 亚洲欧洲一区二区三区| 免费在线亚洲| 亚洲国产日韩欧美在线图片| 亚洲国产综合91精品麻豆| 蜜乳av另类精品一区二区| 久久综合久久久| 精品成人一区| 免费在线看成人av| 亚洲国产精品一区二区尤物区 | 一区二区三区视频免费在线观看| 亚洲欧洲日本在线| 久热综合在线亚洲精品| 久久综合伊人77777麻豆| 一区二区亚洲精品国产| 久久视频一区二区| 亚洲国产精选| 亚洲视频精选| 国产视频一区在线| 久久蜜臀精品av| 亚洲高清视频一区| 中国成人黄色视屏| 国产欧美一区二区三区在线看蜜臀| 性xx色xx综合久久久xx| 免费观看成人| av成人免费在线| 国产精品美女久久久免费| 午夜日韩av| 欧美成人日韩| 亚洲一区二区三区四区五区午夜| 国产欧美日韩综合| 久久综合九色综合久99| 日韩视频一区二区三区在线播放| 欧美亚洲视频| 亚洲国产精品女人久久久| 欧美日韩在线电影| 久久av一区| 亚洲免费观看在线视频| 久久久噜噜噜久久人人看| 亚洲日本激情| 国产欧美日韩伦理| 欧美精品自拍| 久久国内精品自在自线400部| 亚洲精品久久久久久久久久久| 欧美一区二区三区男人的天堂 | 久久综合五月| 亚洲一区二区三区在线| 亚洲夫妻自拍| 国产视频在线观看一区二区三区| 欧美国产日韩一区| 久久国产精品久久久| 日韩亚洲欧美成人| 久久久亚洲午夜电影| 洋洋av久久久久久久一区| 国产一区二区观看| 欧美日韩亚洲免费| 免费日韩av| 久久aⅴ国产紧身牛仔裤| 在线视频欧美日韩| 亚洲激情女人| 欧美电影免费观看大全| 亚洲免费黄色| 在线日韩日本国产亚洲| 国内精品久久久久久| 国产精品欧美久久| 欧美日韩精品免费观看视频完整 | 亚洲精品日韩综合观看成人91|