Intro_01.cpp
上传用户:sz83729876
上传日期:2013-03-07
资源大小:4140k
文件大小:3k
源码类别:

OpenGL

开发平台:

Windows_Unix

  1. #include "intro_01.h"
  2. #include "Math.h" 
  3. //***************************************
  4. //  CIntroScene: The Noise Stuff
  5. //***************************************
  6. CIntroScene::CIntroScene()
  7. {
  8.     m_fFades[ FADEIN ].m_bOn = true;
  9.     m_fFades[ FADEIN ].m_fTime = 5.0f;
  10.     m_fFades[ FADEIN ].m_fColorR = 0.0;
  11.     m_fFades[ FADEIN ].m_fColorG = 0.0;
  12.     m_fFades[ FADEIN ].m_fColorB = 0.0;
  13.     m_fFades[ FADEOUT ].m_bOn = true; 
  14.     m_fFades[ FADEOUT ].m_fTime = 5.0f;
  15.     m_fFades[ FADEOUT ].m_fColorR = 1.0;
  16.     m_fFades[ FADEOUT ].m_fColorG = 1.0;
  17.     m_fFades[ FADEOUT ].m_fColorB = 1.0;
  18.     m_fLength = 8.0f;
  19.     SetSceneName( "The Noise Stuff" );
  20. }
  21. bool CIntroScene::Initialize()
  22. {
  23.     m_pNoise = new CImage();
  24.     if (!m_pNoise)
  25.         return false;
  26.     m_pNoise->m_cData = new unsigned char[ 256 * 256 * 3 ];
  27.     if (!m_pNoise->m_cData)
  28.         return false;
  29.     m_pNoise->m_dwWidth = 256;
  30.     m_pNoise->m_dwHeight = 256;
  31.     m_pNoise->m_dwDepth = 24;
  32.     Texture* tex = Texture::GetInstance();
  33.     m_iNoiseTex = tex->UploadTexture( m_pNoise );
  34.     
  35.     glEnable( GL_TEXTURE_2D );
  36.     return true;
  37. }
  38. bool CIntroScene::Cleanup()
  39. {
  40.     if (m_pNoise)
  41.         delete m_pNoise;
  42.     return true;
  43. }
  44. bool CIntroScene::Render( int iScreenWidth, int iScreenHeight )
  45. {
  46.     glMatrixMode( GL_PROJECTION );
  47.     glPushMatrix();
  48.         glLoadIdentity();
  49.         glOrtho( 0, iScreenWidth, iScreenHeight, 0, -1, 1 );
  50.     glMatrixMode( GL_MODELVIEW );
  51.     glPushMatrix();
  52.         glLoadIdentity();
  53.     glEnable( GL_TEXTURE_2D );
  54.     glBindTexture( GL_TEXTURE_2D, m_iNoiseTex );
  55.     glColor3f( 1, 1, 1 );
  56.     glBegin( GL_QUADS );
  57.         glTexCoord2f( 1, 0 ); glVertex3f( iScreenWidth,             0, 0 );
  58.         glTexCoord2f( 0, 0 ); glVertex3f(            0,             0, 0 );
  59.         glTexCoord2f( 0, 1 ); glVertex3f(            0, iScreenHeight, 0 );
  60.         glTexCoord2f( 1, 1 ); glVertex3f( iScreenWidth, iScreenHeight, 0 );
  61.     glEnd();
  62.     glMatrixMode( GL_PROJECTION );
  63.     glPopMatrix();
  64.     glMatrixMode( GL_MODELVIEW );
  65.     glPopMatrix();
  66.     return true;
  67. }
  68. bool CIntroScene::Update()
  69. {
  70.     long idx = 0;
  71.     unsigned char* pData = m_pNoise->m_cData;
  72.     for( long y=0; y<65536; y++ )
  73.     {
  74.         m_uRandom += rand()%0xff;
  75.         pData[0] = m_uRandom;
  76.         pData[1] = m_uRandom;
  77.         pData[2] = m_uRandom;
  78.         pData+=3;
  79.     }
  80.     glBindTexture( GL_TEXTURE_2D, m_iNoiseTex );
  81.     glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, 256, 256, 
  82.                      GL_RGB, GL_UNSIGNED_BYTE, m_pNoise->m_cData );
  83.     return true;
  84. }