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

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消息,在其消息處理函數中改變一些參數值,比如每過多少毫秒就旋轉一定的角度,并且重繪場景。

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,我們需要調用timeGetTime()函數,因此在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;

并在構造函數中進行初始化:

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

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

4,同樣為了計算幀速率,修改OnDraw函數如下,在其中用glPushMatrix glPopMatrixRenderScene函數包裹起來,從而確保動畫會正確運行。在SwapBuffers調用后我們調用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類中加入下述成員函數,用來顯示幀速率信息到窗口標題

//////////////////////////////////////////////////////////////////////////////
// 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函數中,通過增加變量DayOfYear HourOfDay的值來控制地球和月球的位置,并且調用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 ()
{
//繪制函數
    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/    

本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
原文鏈接: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>
            亚洲电影免费观看高清完整版| 夜夜精品视频| 欧美 日韩 国产一区二区在线视频 | 亚洲激情电影在线| 最新日韩在线视频| 一区二区精品在线| av成人毛片| 羞羞答答国产精品www一本 | 久久久久高清| 欧美高清在线观看| 日韩午夜剧场| 欧美永久精品| 欧美粗暴jizz性欧美20| 国产精品国产福利国产秒拍 | 原创国产精品91| 在线亚洲伦理| 久久久综合视频| 91久久精品日日躁夜夜躁欧美| 一本色道久久综合狠狠躁的推荐| 性做久久久久久免费观看欧美| 欧美 日韩 国产 一区| 国产精品看片资源| 亚洲国产另类久久精品| 午夜精品久久久久| 亚洲欧洲一区二区在线观看| 午夜视频一区在线观看| 欧美国产国产综合| 国产亚洲欧洲一区高清在线观看| 亚洲开发第一视频在线播放| 欧美一级播放| 一区二区三区高清不卡| 久久蜜桃资源一区二区老牛 | 亚洲性av在线| 欧美韩日一区二区| 欧美一区二区观看视频| 欧美精品观看| 亚洲国产经典视频| 久久九九久久九九| 亚洲欧美电影在线观看| 欧美日韩福利| 亚洲欧洲一区二区在线观看| 免费不卡在线观看av| 篠田优中文在线播放第一区| 欧美日韩免费高清| 亚洲精品欧美日韩专区| 麻豆精品一区二区av白丝在线| 亚洲综合电影| 国产女人18毛片水18精品| 亚洲自拍偷拍一区| 一本色道久久综合亚洲精品高清 | 99国产精品视频免费观看一公开 | 欧美激情综合| 毛片一区二区三区| 在线日韩精品视频| 免费一级欧美在线大片| 久久爱www| 黄色成人在线网站| 久久婷婷综合激情| 久久精品欧美日韩精品| 狠狠综合久久av一区二区小说 | 欧美一区二区三区在线观看| 一区二区三区你懂的| 国产精品久久久久久久久久直播| 一区二区三区欧美日韩| 99精品视频免费在线观看| 欧美日韩国产一区二区三区| 亚洲私人黄色宅男| 亚洲一区3d动漫同人无遮挡| 国产精品欧美日韩| 久久福利影视| 久久久久久久久蜜桃| 尤物九九久久国产精品的特点| 欧美高清在线一区| 欧美日韩精品免费观看视频完整| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 亚洲成人在线免费| 欧美成人午夜激情视频| 欧美国产成人精品| 亚洲一区二区三区视频播放| 午夜精品国产更新| 狠狠色噜噜狠狠色综合久| 欧美国产日韩在线| 国产精品久久久久久久午夜| 久久久xxx| 欧美成人久久| 亚洲欧美综合一区| 久久久久9999亚洲精品| 日韩视频免费在线观看| 午夜欧美不卡精品aaaaa| 亚洲国产精品女人久久久| 一区二区日韩精品| 激情综合网激情| 亚洲网站视频| 最近中文字幕日韩精品| 亚洲少妇在线| 亚洲黄色片网站| 亚洲综合不卡| 日韩西西人体444www| 午夜欧美视频| 亚洲一区二区视频| 老司机一区二区三区| 亚洲一区欧美| 欧美/亚洲一区| 久久久精品999| 欧美视频二区| 亚洲黄一区二区三区| 国语自产精品视频在线看一大j8 | 免费毛片一区二区三区久久久| 欧美精品免费观看二区| 久久噜噜亚洲综合| 国产精品视频| 99re热这里只有精品视频| 亚洲国产日韩欧美在线图片| 亚洲尤物视频在线| 亚洲一区免费视频| 欧美日韩一区二区在线观看| 欧美刺激午夜性久久久久久久| 国产精品女主播| 日韩亚洲视频| 一区二区三区免费观看| 欧美黄色一区| 欧美成人午夜激情视频| 激情文学综合丁香| 久久久噜噜噜久噜久久| 久久久亚洲午夜电影| 国产农村妇女毛片精品久久麻豆 | 欧美成人午夜激情在线| 麻豆精品网站| 悠悠资源网亚洲青| 久久久久久伊人| 麻豆精品视频在线观看| 国内视频精品| 欧美在线免费观看| 久久久蜜桃一区二区人| 国产一区清纯| 久久九九久精品国产免费直播| 久久久久久久久伊人| 国产美女精品免费电影| 午夜久久一区| 老司机免费视频久久| 亚洲精品1区2区| 欧美精品精品一区| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 久久这里只有| 亚洲国产天堂久久综合| 欧美激情视频给我| 99国产精品视频免费观看一公开| 亚洲一区二区黄| 国产精品免费视频观看| 欧美一级二级三级蜜桃| 久久婷婷国产麻豆91天堂| 亚洲高清成人| 欧美日韩国产va另类| 亚洲综合视频在线| 美女视频黄 久久| 日韩系列欧美系列| 国产麻豆精品在线观看| 久久天天躁夜夜躁狠狠躁2022| 欧美高清视频一区| 亚洲一区二区精品在线| 韩日欧美一区| 欧美精品自拍偷拍动漫精品| 亚洲图片在区色| 欧美a级片网| 亚洲天堂av在线免费观看| 国产精品色在线| 葵司免费一区二区三区四区五区| 亚洲黄色精品| 久久国产精品久久国产精品| 亚洲国产小视频在线观看| 国产精品chinese| 久久亚洲影音av资源网| 一本一本大道香蕉久在线精品| 久久人91精品久久久久久不卡| 亚洲精品一区久久久久久| 国产欧美日韩综合一区在线观看 | 女人香蕉久久**毛片精品| 国产精品99久久久久久久女警| 国产精品午夜在线| 免费久久99精品国产自在现线| 中文亚洲欧美| 亚洲国产成人久久| 久久综合九色综合欧美就去吻| 亚洲无毛电影| 亚洲国产日韩综合一区| 国产偷国产偷亚洲高清97cao| 欧美片第1页综合| 久久综合色婷婷| 亚洲欧美日韩在线高清直播| 999在线观看精品免费不卡网站| 蜜桃av一区二区| 久久久www成人免费无遮挡大片| 亚洲一卡久久| 亚洲婷婷在线| 亚洲精品在线免费观看视频| 在线成人中文字幕| 国产毛片一区| 国产麻豆综合| 国产精品亚洲网站| 国产精品高潮粉嫩av|