OPENGL 显示文字

最近对opengl输出文字比较感兴趣,把这几天疑惑的东西写下来,因为自己也是刚接触只是了解了皮毛。所以内容有些局限,不过希望对像我这种初学的人提供点信息。

在windows下wglUseFontBitmaps与wglUseFontOutlines提供opengl输出文字的字符资源,二者均通过构建一系列显示列表,然后用glCallLists执行这些显示列表就可以输出我们想要的字符。wglUseFontBitmaps产生bitmap,wglUseFontOutlines产生字形轮廓的浮点表示,所以可用来显示立体字符,网上有不少例程,我在学习过程中有两点疑惑:1,参数中first如何与字符对应;2,listBase的作用;

经过查找基本确定

1双字节内码DBCS(双字节字符集) 支持很多不同的语言字母,如汉语、日语和朝鲜语等。 DBCS 使用数字 0–128 表示 ASCII 字符集。其它大于 128 的数字作为前导字节字符,它并不是真正的字符,只是简单的表明下一个字符属于非拉丁字符集。在 DBCS 中,ASCII 字符的长度是一个字节,而汉语、朝鲜语和其它东亚字符的长度是 2 个字节。汉字内码的偏移量为256。故用下列语句实现字符的对应关系:

DWORD  dwChar=m_strText[i];

                   if(IsDBCSLeadByte(m_strText[i])){

                            dwChar= (dwChar<<8) + m_strText[i+1]+256;  //汉字内码的偏移量为256                  

                            i+=2;

                   }

                   else{

                            dwChar=m_strText[i];

                            i++;

                   }

其中m_strText是要输出的字符串,IsDBCSLeadByte(m_strText[i])判断m_strText[i]是不是前导字节。

2:参数ListBase的作用是和参数count一起确定生成列表的名称,供glCallLists调用;

字符基ASCIIDBCSUnicode
所有的 string 都是以C-style字符串的。C-style字符串是字符数。所以我先介字符型。里有3编码模式对应3种字符型。第一种编码类型是字符集(single-byte character set orSBCS)。在编码模式下,所有的字符都只用一个字表示。ASCIISBCS。一个字表示的0用来SBCS字符串的束。
第二种编码模式是多字字符集(multi-byte character set orMBCS)。一个MBCS编码包含一些一个字节长的字符,而另一些字符大于一个字度。用在Windows里的MBCS包含两种字符型,字符(single-byte  characters)和双字字符(double-byte   characters)。由于Windows里使用的多字字符大部分是两个字节长,所以MBCS常被用DBCS代替。
DBCS编码模式中,一些特定的被保留用来表明他是双字字符的一部分。例如,在Shift-JIS编码中(一个常用的日文编码模式),0x81-0x9f0xe0-oxfc表示 "是一个双字字符,下一个子个字符的一部分。"这样被称作"leading   bytes ",都大于0x7f。跟随在一个leading byte后面的字被称作 "trail   byte"。在DBCS中,trail   byte可以是任意非0。像SBCSDBCS字符串的志也是一个表示的0
第三种编码模式是UnicodeUnicode是一种所有的字符都使用两个字节编码编码模式。Unicode字符有也被称作字符,因它比字符(使用了更多的存)。注意,Unicode不能被看作MBCSMBCS的独特之在于它的字符使用不同度的字节编码Unicode字符串使用两个字表示的0它的志。
符包含拉丁文字母表,accented   charactersASCII准和DOS操作系形字符。双字字符被用来表示东亚及中言。Unicode被用在COMWindows   NT操作系内部。
你一定已很熟悉字符。当你使用char,你理的是字符。双字字符也用char型来行操作(是我将会看到的关于双子字符的很多奇怪的地方之一)。Unicode字符用wchar_t来表示。Unicode字符和字符串常量用前L来表示。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值