ImgText.cpp
上传用户:hkb425
上传日期:2007-06-16
资源大小:34191k
文件大小:3k
源码类别:

游戏引擎

开发平台:

Visual C++

  1. // ImgText.cpp: implementation of the CImgText class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "ImgText.h"
  6. #include "stdio.h"
  7. #include "math.h"
  8. unsigned int  CImgText::m_texFont;
  9. int           CImgText::m_numUser=0;
  10. int           CImgText::m_FontType=0;
  11. float         CImgText::m_textDist=-520;
  12. //////////////////////////////////////////////////////////////////////
  13. // Construction/Destruction
  14. //////////////////////////////////////////////////////////////////////
  15. CImgText::CImgText()
  16. {
  17. m_numUser++;
  18. }
  19. CImgText::~CImgText()
  20. {
  21. m_numUser--;
  22. if(m_numUser==0)
  23. {
  24. }
  25. }
  26. void  CImgText::PrintString(int x,int y,char* string,
  27. bool bCenter,int size,int type)
  28. {
  29. int num=strlen(string);
  30. float widthFactor=0.65f;
  31. if(m_FontType==1)widthFactor=0.7f;
  32. int xbias=int(bCenter*(num+1)*size*widthFactor)/2;
  33. int ybias=bCenter*size/2;
  34.  
  35. glBlendFunc(GL_ONE,GL_ONE);
  36. glEnable(GL_BLEND);
  37. // glAlphaFunc(GL_GEQUAL,0.05f);
  38. // glEnable(GL_ALPHA_TEST);
  39. glDisable(GL_DEPTH_TEST);
  40.   glBindTexture(GL_TEXTURE_2D,m_texFont );
  41. glEnable(GL_TEXTURE_2D);
  42. float texx,texy;
  43. float xpos,ypos;
  44. ypos=float(300-y+ybias);
  45.   glBegin(GL_QUADS);
  46.         for(int i=0;i<num;i++)
  47. {
  48. texx=float(int(string[i])%16)/16;
  49. texy=float(int(string[i]-32)/16)/16 + m_FontType*0.5f;
  50. xpos=float(x-xbias-400) + i*size*widthFactor;
  51. glTexCoord2f(texx,1-texy);    
  52. glVertex3f(xpos,ypos,m_textDist);
  53. glTexCoord2f(texx+0.0625f,1-texy);    
  54. glVertex3f(xpos+size,ypos,m_textDist);
  55. glTexCoord2f(texx+0.0625f,1-texy-0.0625f);    
  56. glVertex3f(xpos+size,ypos-size,m_textDist);
  57. glTexCoord2f(texx,1-texy-0.0625f);    
  58. glVertex3f(xpos,ypos-size,m_textDist);
  59. }  
  60. glEnd();
  61. glDisable(GL_TEXTURE_2D);
  62. glDisable(GL_BLEND);
  63. // glEnable(GL_DEPTH_TEST);
  64. // glDisable(GL_ALPHA_TEST);
  65. }
  66. void CImgText::PrintfChar(int x,int y,char ch,
  67.               bool bCenter,int size,int type)
  68. {
  69. char str[2];
  70. str[0]=ch;
  71. str[1]=NULL;
  72.     PrintString(x,y,str,bCenter,size,type);
  73. }
  74. void  CImgText::PrintValue(int x,int y,float fValue,bool bCenter,int size)
  75. {
  76. char str[32];
  77. sprintf(str,"%.2f",fValue);
  78.     PrintString( x, y,str);
  79. }
  80. void  CImgText::PrintValue(int x,int y,double dValue,bool bCenter,int size)
  81. {
  82. char str[32];
  83. sprintf(str,"%.2f",dValue);
  84.     PrintString( x, y,str);
  85. }
  86. void  CImgText::PrintValue( int x,int y,int iValue,bool bCenter,int size)
  87. {
  88. char str[32];
  89. wsprintf(str,"%d",iValue);
  90.     PrintString( x, y,str);
  91. }
  92. void  CImgText::SetFontType(int type)
  93. {
  94. m_FontType=type;
  95. if(m_FontType!=1)m_FontType=0;
  96. }
  97. void  CImgText::SetViewFOVAngle(float angle)
  98. {
  99. if(angle<2 || angle>85)angle=60;
  100. m_textDist=-300/tanf(angle*0.0174533f);
  101. }
  102. float CImgText::GetTextDist()
  103. {
  104.     return m_textDist;
  105. }