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

OpenGL

开发平台:

Windows_Unix

  1. #include <math.h>
  2. #include "Cresent.h"
  3. #define PI  3.141592f
  4. CCresentScene::CCresentScene()
  5. {
  6.     m_fFades[ FADEIN ].m_bOn = true;
  7.     m_fFades[ FADEIN ].m_fTime = 1.5f;
  8.     m_fFades[ FADEIN ].m_fColorR = 0.0;
  9.     m_fFades[ FADEIN ].m_fColorG = 0.0;
  10.     m_fFades[ FADEIN ].m_fColorB = 0.0;
  11.     m_fFades[ FADEOUT ].m_bOn = true; 
  12.     m_fFades[ FADEOUT ].m_fTime = 3.5f;
  13.     m_fFades[ FADEOUT ].m_fColorR = 0.0;
  14.     m_fFades[ FADEOUT ].m_fColorG = 0.0;
  15.     m_fFades[ FADEOUT ].m_fColorB = 0.0;
  16.     m_fLength = 5.0f;
  17.     SetSceneName( "Cresent" );
  18. }
  19. bool CCresentScene::Initialize()
  20. {
  21.     Texture* tex = Texture::GetInstance();
  22.     m_texCloud = tex->LoadTexture( "flow.jpg" );
  23.     if (m_texCloud==0xffff)
  24.         return false;
  25.     m_fMult = 0;
  26.     return true;
  27. }
  28. bool CCresentScene::Cleanup()
  29. {
  30.     return true;
  31. }
  32. bool CCresentScene::Render( int iScreenWidth, int iScreenHeight )
  33. {
  34.     OpenGL* ogl = OpenGL::GetInstance();
  35.     ogl->SetFOV( 20.0f );
  36.     gluLookAt( 0, 0, 12, 
  37.                0, 0, -20,
  38.                0, 1, 0 );
  39.     glPushMatrix();
  40.         glRotatef( -90, 0, 0, 1 );
  41.         glColor3f( 0.5f + (0.5f * cos(m_fMult/2.0f)), 0.75, 0.5f + (0.5f * sin(m_fMult/1.75f)) );
  42.         RenderCresent();
  43.     glPopMatrix();
  44.     ogl->SetFOV( 45.0f );
  45.     return true;
  46. }
  47. bool CCresentScene::Update()
  48. {
  49.     m_fMult += 1.0f * Timer::GetTimer( TIMER_SINCELASTFRAME );
  50.     return true;
  51. }
  52. CVector3 CCresentScene::CresentIt( float u, float v )
  53. {
  54.     CVector3 vec;
  55.     float fSin2PiV = sin(2*PI*v)*(1+(cos( (v*18)+m_fMult )/2.0f));
  56.     float fSin2PiU = sin(2*PI*u);
  57.     vec.x = ( 2+fSin2PiU * fSin2PiV ) * sin(3*PI*v);
  58.     vec.y = ( 2+fSin2PiU * fSin2PiV ) * cos(3*PI*v);
  59.     vec.z = cos(2*PI*u) * fSin2PiV + 4*v;
  60.     return vec;
  61. }
  62. void CCresentScene::RenderCresent()
  63. {
  64.     float fDeltaU = 0.10;
  65.     float fDeltaV = 0.03;
  66.     CVector3 v1, v2, v3, v4;
  67.     glEnable( GL_TEXTURE_2D );
  68.     glBindTexture( GL_TEXTURE_2D, m_texCloud );
  69.     glMatrixMode( GL_TEXTURE );
  70.     glPushMatrix();
  71.     glScalef( 0.5, 0.5, 0.5 );
  72.     glMatrixMode( GL_MODELVIEW );
  73.     glEnable( GL_BLEND );
  74.     glBlendFunc( GL_SRC_COLOR, GL_ONE );
  75.     glBegin( GL_QUADS );
  76.     for( float u=0.0f; u<1.0f; u+=fDeltaU )
  77.     {
  78.         for( float v=-1.0f; v<1.0f; v+=fDeltaV )
  79.         {
  80.             v1 = CresentIt( u + fDeltaU, v );
  81.             v2 = CresentIt(           u, v );
  82.             v3 = CresentIt(           u, v + fDeltaV );
  83.             v4 = CresentIt( u + fDeltaU, v + fDeltaV );
  84.             glTexCoord2f( v1.z, v1.y ); glVertex3f( v1.x, v1.y, v1.z );
  85.             glTexCoord2f( v2.z, v2.y ); glVertex3f( v2.x, v2.y, v2.z );
  86.             glTexCoord2f( v3.z, v3.y ); glVertex3f( v3.x, v3.y, v3.z );
  87.             glTexCoord2f( v4.z, v4.y ); glVertex3f( v4.x, v4.y, v4.z );
  88.         }
  89.     }
  90.     glEnd();
  91.     glDisable( GL_BLEND );
  92.     glMatrixMode( GL_TEXTURE );
  93.     glPopMatrix();
  94.     glMatrixMode( GL_MODELVIEW );
  95. }