`
nsxd15nsxd
  • 浏览: 13879 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

Opengl:显示中文改进版

 
阅读更多

Opengl:显示中文改进版
2010年07月09日
  由于对这方面不是特别了解,基本上结合别人的代码,再加些自己认为更好点的改进。
  #define MAX_CHAR 255
  #define TEXT_CENTER 0
  #define TEXT_LEFT 1
  #define TEXT_RIGHT 2
  HFONT CreateFont(char *facename, int height, int weight, bool italic,bool underline,bool strikeout)
  {
  LOGFONT lf;
  lf.lfHeight = height;
  lf.lfWidth = 100;
  lf.lfEscapement = 0;
  lf.lfOrientation = 0;
  lf.lfWeight = weight;
  lf.lfItalic = italic;
  lf.lfUnderline = underline;
  lf.lfStrikeOut = strikeout;
  lf.lfCharSet = DEFAULT_CHARSET;
  lf.lfOutPrecision = OUT_TT_PRECIS;
  lf.lfClipPrecision = CLIP_DEFAULT_PRECIS;
  lf.lfQuality = PROOF_QUALITY;
  lf.lfPitchAndFamily = VARIABLE_PITCH | TMPF_TRUETYPE | FF_MODERN;
  strcpy(lf.lfFaceName,facename);
  // 创建字体
  return CreateFont( -24, // 字体的高度
  0, // 字体的宽度
  0, // 旋转的角度
  0, // 定位角度
  FW_BOLD, // 字体的粗细
  TRUE, // 斜体?
  FALSE, // 下划线?
  FALSE, // 删除线?
  GB2312_CHARSET, // 字符集
  OUT_TT_PRECIS, // 输出精度
  CLIP_DEFAULT_PRECIS, // 裁减精度
  ANTIALIASED_QUALITY, // 输出质量
  FF_DONTCARE|DEFAULT_PITCH, // 间距和字体族
  "宋体"); // 字体名称
  }
  struct FONTS // 保存轮廓字体
  {
  FONTS()
  {
  val = 0;
  }
  DWORD val; // 保存显示表的值(用来比较)
  GLuint listName; // 保存显示表的名称
  GLYPHMETRICSFLOAT gmf; // 保存字体的详细信息
  };
  void Show2DText(const char *str,SCoor coor,SColor color,int flag,double scale)
  {
  glDisable(GL_TEXTURE_2D);
  DWORD FTextList[MAX_CHAR];
  int m_iCount=strlen(str);
  static HFONT hFont=0;
  static map listmap;
  HDC hDC=wglGetCurrentDC();
  if(hFont==0)
  {
  hFont=CreateFont("隶书",800,800,0,0,0);
  SelectObject(hDC,hFont);
  } 
  int  i=0;
  int  j=0,k=0;
  int ich;
  double width =0;
  glColor3d(color.r,color.g,color.b);
  while(i显示列表的第一个字符
  1,//要转换为显示列表的字符数
  font.listName,//显示列表的基数
  0.0f,//指定与实际轮廓的最大偏移量
  0.0,//0.15f,//在Z轴负方向的值
  WGL_FONT_POLYGONS, //指定显示列表线段或多边形
  &font.gmf);
  }
  width += listmap[ich].gmf.gmfCellIncX;
  }
  width*=scale;
  switch(flag)
  {
  case TEXT_CENTER:
  width = -width/2;
  break;
  case TEXT_LEFT:
  width = 0;
  break;
  case TEXT_RIGHT:
  width = -width;
  break;
  default :
  width=0;
  break;
  }
  glPushMatrix();
  glTranslated(coor.x,coor.y,0);
  glPushAttrib(GL_LIST_BIT);
  {
  glTranslated(width,0,0);
  glScaled(scale,scale,1);
  for(k=0;k字符
  }
  }
  glPopAttrib();
  glPopMatrix();
  glEnable(GL_TEXTURE_2D);
  }
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics