介绍OpenGL中关于文字绘制的方法,包括汉字的绘制
OpenGL文字输出2009年05月26日 星期二 13:47
OpenGL是一个3D图形界面,在它上面显示文字有别于在Windows图形环境下显示文字。在OpenGL上文字需要一些特殊的方法,因为在3D图形界面上,有平面文字、3D文字之分。特别是汉字的显示要麻烦一些,因为OpenGL的底层不支持汉字的双字节编码。 本文的解决方案可以实现三种不同方式的文字显示:
常规文字
这种文字显示是一种高效能的、以位图方式绘制字体的方法,它采用了一种平面图形的方法,所以显示的是平面文字。只可惜,这个平面文字显示方法不能支持汉字。
3D文字
OpenGL中文字也可以作为3D对象来显示。这种3D文字可以缩放、旋转、贴图,有其它3D对象的所有特性。我们在程序还加入了对双字节汉字的特殊处理,所以它也能显示立体汉字。
平面汉字
OpenGL平面汉字。基本原理是:在系统内部建立一个确定字体的设备场景(MDC),用GDI方式将文字在设备场景中形成单色位图,再用OpenGL的平面位图显示函数glBitmap(…)将文字显示出来。
以下是源码:
//GLFont.h----------------------------------------------------------------------
// GLFont.h: interface for the CGLFont class.
#if !defined(AFX_GLFONT_H__88F1F000_50F5_452A_B95E_60ED83712FA5__INCLUDED_)
#define AFX_GLFONT_H__88F1F000_50F5_452A_B95E_60ED83712FA5__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class CGLFont
{
public:
void entext(float x,float y, LPCTSTR str,HFONT hFont,float r,float g,float b);
void c3dtext(LPCTSTR str,HFONT hFont,float z);
void Printfc3d(LPCTSTR strText,HFONT hFont,float z=0.05f);
void Printftext(int x, int y, LPCTSTR lpszText,HFONT hFont);
void settext(float x,float y,LPCTSTR str,HFONT Font,float r,float g,float b);
CGLFont();
virtual ~CGLFont();
protected:
HFONT hFont;
};
#endif
//GLFont.cpp----------------------------------------------------------------------
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "GLFont.h"
//#ifdef _DEBUG
//#undef THIS_FILE
//static char THIS_FILE[]=__FILE__;
//#define new DEBUG_NEW
//#endif
//////////////////////////////////////////////////////////////////////
//unsigned int Base;
//////////////////////////////////////////////////////////////////////
CGLFont::CGLFont()
{
}
CGLFont::~CGLFont()
{
}
void CGLFont::entext( float x,float y, LPCTSTR str, HFONT hFont,
float r, float g, float b)
{ HDC hdc = wglGetCurrentDC();
SelectObject(hdc, hFont);
unsigned int Base = glGenLists(96);
wglUseFontBitmaps(hdc, 32, 96,Base);
glDisable(GL_TEXTURE_2D);
glDisable(GL_LIGHTING);
glPushAttrib(GL_LIST_BIT);
glColor3f(r,g,b);
glRasterPos2f(x/100, y/100);
glListBase(Base - 32);
glCallLists(_tcslen(str), GL_UNSIGNED_BYTE, str);
glP
OpenGL中文字的几种常用绘制方法_计算机软件及应用_IT/计算机_专业资料。三堆场景中绘制和标注文字是OpenGL提供的一个强大功能.但是由于国内资料的短缺,几乎所有的 ...
基于SDL和OpenGL实时绘制中文字体_专业资料。为了能够在三维场景当中实时的将中文字体绘制在指定的位置上,提出了基于SDL和OpenGL跨平台图形库,采用生产者-消费者模型...
【OpenGL汉化研究】OpenGL如何显示文字_IT/计算机_专业资料。【游戏汉化与分析...开始。 前面已经说过了,要显示字符,就需要通过操作系统,把绘制字符的动作装到...
OpenGL 文字显示 文字显示 (一)显示英文 OpenGL 并没有直接提供显示文字的功能,...需要在第一次调用的时候初始化, 以后就可以很方便的调用这些显示列表来绘制 ...
opengl图形填充、正余弦曲线绘制、字符输出(C++)_工学_高等教育_教育专区。opengl图形填充、正余弦曲线绘制、字符输出实验五 1、实验目的和要求 了解且掌握图形填充...
Opengl 显示文字 (一下代码复制到 VC6.0 编译器中将会只有一行,不会自动换行...(MAX_CHAR); // 把每个字符的绘制命令都装到对应的显示列表中 ...
OpenGL入门学习之十六——在Windows系统中显示文字_IT/计算机_专业资料。OpenGL...(MAX_CHAR); // 把每个字符的绘制命令都装到对应的显示列表中 ...
openGL输出简单文字_计算机软件及应用_IT/计算机_专业资料。#include <gl/glut... openGL图形的旋转与平移 openGL画矩形 openGL橡皮筋技术 openGL棋盘填充...
多媒体开发与编程 3 OpenGL图形绘制 ? 基本概念 ? 基于Glut开发OpenGL程序 ? ...功能包括物体描述、平移、旋转、缩放、 光照、纹理、材质、像素、位图、文字处理...
OpenGL绘制Bmp图片_工学_高等教育_教育专区。二维坐标 OpenGL 一、定义二维坐标的尺度: void gluOrtho2D(left, right, top, bottom); 四个参数分别代表(左下角 ...

我要评论