📄 csdn_文档中心_opengl 下的文字显示.htm
字号:
<TR>
<TD align=middle bgColor=#003399><FONT color=#ffffff>关键字</FONT></TD>
<TD width=500> OpenGL 文字</TD></TR>
<TR>
<TD align=middle height=5></TD>
<TD align=middle width=500></TD></TR></TBODY></TABLE><!--文章说明信息结束//-->
<TABLE border=0 width=600>
<TBODY>
<TR>
<TD align=left><BR><FONT size=2><FONT face=宋体>
一直以来,OpenGL状态下的文字显示都是一个问题,本文使用嵌套显示列表的方式进行OpenGL状态下的字符串的显示。<?xml:namespace
prefix = o ns = "urn:schemas-microsoft-com:office:office"
/><o:p></o:p></FONT></FONT>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US
style="FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt"><SPAN
style="mso-tab-count: 1">
</SPAN>有以下几点需要注意:<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US
style="FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt"><SPAN
style="mso-tab-count: 1">
</SPAN>1:本程序显示按照给定的高度和文字的位置显示某一种字体的文字,其中一些字体的参数定义在OpenGLText内部给定,可以随意将它抽出来。如果将代码用于实际应用中,建议文字的文字间距自己设定,也可以随意添加文字的倾斜角、旋转角度、定位方式等等参数。<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US
style="FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt"><SPAN
style="mso-tab-count: 1">
</SPAN>2:</SPAN><SPAN lang=EN-US
style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">wglUseFontOutlines函数的第五个参数表示文字的精度(弦偏差),一般设置成零,但这样缺省的做法会导致文字太粗糙,可以将它设置成一个比较小的数,以提高文字显示的精确度,但这样会增加内存的占用量。</SPAN><SPAN
lang=EN-US
style="FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US
style="FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt"><SPAN
style="mso-tab-count: 1">
</SPAN>3:如果文字的高度比较小,文字的线条可能会出现断裂的现象,影响美观,解决这类问题有以下几种方式:(1)使用OpenGL反走样技术;(2)把文字的轮廓用线条勾勒出来;(3)在文字的Draw成员函数中多次调用</SPAN><SPAN
lang=EN-US
style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">glCallList函数,每次调用向周围平移一个像素,这样的话会使文字的线条断裂问题大为改观,速度也是三种方式中最快的。<o:p></o:p></SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN
style="FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">本文的详细代码在这里,欢迎参考:<SPAN
lang=EN-US><A
href="http://bluebohe.go.nease.net/opengltext.rar">下载源程序</A><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN
style="FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">应用方式如下:<SPAN
lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P align=left class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><SPAN
lang=EN-US
style="COLOR: black; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt"><SPAN
style="mso-tab-count: 1">
</SPAN>COpenGLText text;<o:p></o:p></SPAN></P>
<P align=left class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><SPAN
lang=EN-US
style="COLOR: black; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt"><SPAN
style="mso-tab-count: 1">
</SPAN>COpenGLText text2;<o:p></o:p></SPAN></P>
<P align=left class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><SPAN
lang=EN-US
style="COLOR: black; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt"><SPAN
style="mso-tab-count: 1">
</SPAN>text2.m_dX=0;<o:p></o:p></SPAN></P>
<P align=left class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><SPAN
lang=EN-US
style="COLOR: black; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt"><SPAN
style="mso-tab-count: 1">
</SPAN>text2.m_dY=200;<o:p></o:p></SPAN></P>
<P align=left class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><SPAN
lang=EN-US
style="COLOR: black; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt"><SPAN
style="mso-tab-count: 1">
</SPAN>glLoadIdentity(); <o:p></o:p></SPAN></P>
<P align=left class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><SPAN
lang=EN-US
style="COLOR: black; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt"><SPAN
style="mso-tab-count: 1">
</SPAN>glClear(GL_COLOR_BUFFER_BIT); <o:p></o:p></SPAN></P>
<P align=left class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><SPAN
lang=EN-US
style="COLOR: black; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt"><SPAN
style="mso-tab-count: 1">
</SPAN>glColor4f(0.0f, 0.0f, 1.0f, 1.0f); <o:p></o:p></SPAN></P>
<P align=left class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><SPAN
lang=EN-US
style="COLOR: black; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt"><SPAN
style="mso-tab-count: 1">
</SPAN>text.Draw(</SPAN><SPAN lang=EN-US
style="COLOR: #000077; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">"</SPAN><SPAN
style="COLOR: #000077; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">宋体</SPAN><SPAN
lang=EN-US
style="COLOR: #000077; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">"</SPAN><SPAN
lang=EN-US
style="COLOR: black; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">);<o:p></o:p></SPAN></P>
<P align=left class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><SPAN
lang=EN-US
style="COLOR: black; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt"><SPAN
style="mso-tab-count: 1">
</SPAN>text2.Draw(</SPAN><SPAN lang=EN-US
style="COLOR: #000077; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">"</SPAN><SPAN
style="COLOR: #000077; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">楷体</SPAN><SPAN
lang=EN-US
style="COLOR: #000077; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">_GB2312"</SPAN><SPAN
lang=EN-US
style="COLOR: black; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">);<o:p></o:p></SPAN></P>
<P align=left class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><SPAN
lang=EN-US
style="COLOR: black; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt"><SPAN
style="mso-tab-count: 1">
</SPAN>glFlush(); <o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN
style="FONT-FAMILY: 宋体"><FONT size=3>类的声明和实现如下:<SPAN
lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P align=left class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><SPAN
lang=EN-US
style="COLOR: blue; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">#include
</SPAN><SPAN lang=EN-US
style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt"><string><o:p></o:p></SPAN></P>
<P align=left class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><SPAN
lang=EN-US
style="COLOR: blue; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">using</SPAN><SPAN
lang=EN-US
style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">
</SPAN><SPAN lang=EN-US
style="COLOR: blue; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">namespace</SPAN><SPAN
lang=EN-US
style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">
</SPAN><SPAN lang=EN-US
style="COLOR: blue; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">std</SPAN><SPAN
lang=EN-US
style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">;<o:p></o:p></SPAN></P>
<P align=left class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><SPAN
lang=EN-US
style="COLOR: blue; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">class</SPAN><SPAN
lang=EN-US
style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">
COpenGLText<SPAN style="mso-spacerun: yes">
</SPAN><o:p></o:p></SPAN></P>
<P align=left class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><SPAN
lang=EN-US
style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">{<o:p></o:p></SPAN></P>
<P align=left class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><SPAN
lang=EN-US
style="COLOR: blue; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">public</SPAN><SPAN
lang=EN-US
style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">:<o:p></o:p></SPAN></P>
<P align=left class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><SPAN
lang=EN-US
style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt"><SPAN
style="mso-tab-count: 1">
</SPAN></SPAN><SPAN lang=EN-US
style="COLOR: #009900; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">//构造文字</SPAN><SPAN
lang=EN-US
style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt"><o:p></o:p></SPAN></P>
<P align=left class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><SPAN
lang=EN-US
style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt"><SPAN
style="mso-tab-count: 1">
</SPAN>COpenGLText();<o:p></o:p></SPAN></P>
<P align=left class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><SPAN
lang=EN-US
style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt"><SPAN
style="mso-tab-count: 1">
</SPAN></SPAN><SPAN lang=EN-US
style="COLOR: blue; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">virtual</SPAN><SPAN
lang=EN-US
style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">
~COpenGLText();<o:p></o:p></SPAN></P>
<P align=left class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><SPAN
lang=EN-US
style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt"><SPAN
style="mso-tab-count: 1">
</SPAN></SPAN><SPAN lang=EN-US
style="COLOR: #009900; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">//绘制制定字体的文字,字体只在第一次绘制时进行设置,之后可以传入空值</SPAN><SPAN
lang=EN-US
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -