游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2626|回复: 2

openGL显示中文问题有代码

[复制链接]

1

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2011-8-30 11:40:00 | 显示全部楼层 |阅读模式
Context c = renderer.m_context;
  point_size = MulDiv(size, GetDeviceCaps(c, LOGPIXELSY), 72);

  HFONT font = 0;
  if (font_size_lookup[in_size] == 0)
  {
  // Set up the LOGFONT structure
  LOGFONT logical_font;
  logical_font.lfHeight = get_point_size(); //以逻辑单位指定字体字符元或字符高度
  logical_font.lfWidth = 0; //以逻辑单位指定字体字符的平均宽度,如果lfWidth的值为0,则根据设备的纵横比从可用字体的数字转换纵横中选取最接近的匹配值
  logical_font.lfEscapement = 0; //以十分之一度为单位指定每一行文本输出时相对于页面底端的角度
  logical_font.lfOrientation = 0; //以十分之一度为单位指定字符基线相对于页面底端的角度
  logical_font.lfWeight = FW_NORMAL; //指定字体重量。在Windows中,字体重量这个术语用来指代字体的粗细程度
  logical_font.lfItalic = false; //当lfItalic为TRUE时使用斜体
  logical_font.lfUnderline = false; //当lfUnderline为TRUE时给字体添加下划线
  logical_font.lfStrikeOut = false; //当lfStrikeOut为TRUE时给字体添加删除线
  logical_font.lfCharSet = ANSI_CHARSET; //指定字符集
  logical_font.lfOutPrecision = OUT_DEFAULT_PRECIS; //指定输出精度
  logical_font.lfClipPrecision = CLIP_DEFAULT_PRECIS;//指定剪辑精度
  logical_font.lfQuality = PROOF_QUALITY; //定义输出质量
  logical_font.lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE;//指定字体的字符间距和族
  lstrcpy(logical_font.lfFaceName, fontname.c_str());  

  font = CreateFontIndirect(&logical_font);

  HFONT previous_font = (HFONT)SelectObject(c, font);

  wglUseFontBitmapsW(c, 0, 128, next_call_list_start);
  font_size_lookup[in_size] = next_call_list_start;
  font_handle_lookup[in_size] = font;
  next_call_list_start += 130;

  SelectObject(c, previous_font);
  }

TextWriter& Text:perator<<(TextWriter& tw) const
{
  int draw_x;
  int draw_y;
  calculate_position_and_advance_cursor(tw, &draw_x, &draw_y);

  // TODO: This isn't Unicode!
  std::string narrow(m_text.begin(), m_text.end());

  glBindTexture(GL_TEXTURE_2D, 0);
   
  glPushMatrix();
  tw.renderer.SetColor(m_color);
  glListBase(font_size_lookup[tw.size]);  
  glRasterPos2i(draw_x, draw_y + tw.size);
  glCallLists(static_cast<int>(narrow.length()), GL_UNSIGNED_BYTE, narrow.c_str());
  glPopMatrix();

  // TODO: Should probably delete these on shutdown.
  //glDeleteLists(1000, 128);

  return tw;
}

这段代码只能实现ASCLL的128的字符的编码显示,我想要显示中文,
将指定字符集改成logical_font.lfCharSet = GB2312_CHARSET;添加字符显示列表wglUseFontBitmapsW(c, 0, 65535(这里超级浪费因为没用几个汉字), next_call_list_start(这个宏定义是1));显示的时候改成
glCallLists(static_cast<int>(narrow.length()), GL_UNSIGNED_SHORT, narrow.c_str());


还是只能显示少量错误的汉字,而且有很多不认识的字,字符串明显变长了,可能是/0被当成某个双字节字符的其中一个字节显示了,求助要怎么改

1

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2011-8-30 13:07:00 | 显示全部楼层

Re:openGL显示中文问题有代码

好没人气的论坛啊

3

主题

25

帖子

25

积分

注册会员

Rank: 2

积分
25
QQ
发表于 2011-9-9 22:45:00 | 显示全部楼层

Re:openGL显示中文问题有代码

研究opengl的人可能比较少吧,建议你参考网上一个显示中文类的例子:
http://hi.baidu.com/bleach007/blog/item/1244a244d90dfa44500ffe11.html
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-8-5 17:42

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表