Opengl 汉字显示
最近开始学习opengl,菜鸟将自己理解的东西在此放置,欢迎各位点评.或推荐些好的资料,谢谢
目前本人所了解的opengl显示汉字的方式有几种了,什么位图显示等等,各有利弊,照本人理解校园爱情电影,较能接受的就是初始化显示列表,然后显示,以下给出原代码.
大多从其它文章copy强调句练习的,但经过修改一些参数,利用Show2DText()也能显示出3D效果,是否有点蒙人的嫌疑,于是我将它们理解为两种构建显示列表的方式有所不同而已.
以下是完整代码:
//GLFont.h
#include <windows.h>
#include "gl/gl.h"
#include <string>
#pragma warning(disable:4244)
using namespace std;
//OpenGL汉字显示类
class GLfont
{
HFONT hFont;
COLORREF cl;
public:
GLfont();
virtual ~GLfont();
void SetTextColor(COLORREF textcolor);//字体颜色设置
void CreateFont(char *facename, int height, int weight, bool italic,bool underline,bool strikeout);和平鸽子简笔画
void ShowText(int x, int y, LPCTSTR lpszText);//华为手机什么系统显示图象D汉字
void Show2DText(char *str);//显示图形D汉字
void Show3DText(unsigned char *str);//显示图形D汉字
};
GLfont::GLfont()
{
cl=RGB(255,255,255);
}
GLfont::~GLfont()
{
if(hFont) DeleteObject(hFont);
}
油面筋塞肉//只有关闭光照和纹理才能正确显示颜色
void GLfont::SetTextColor(COLORREF textcolor)//字体颜色设置
{
cl=textcolor;
}
void GLfont::CreateFont(char *facename, int height, int weight, bool italic,bool underline,bool strikeout)
{
LOGFONT lf;
lf.lfHeight = height;
lf.lfWidth = 0;
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);
// 创建字体
hFont = CreateFontIndirect(&lf);
}
//2D图像汉字只与屏幕相联系,与具体的变换矩阵无关,也就是说不能缩放旋转。
骨关节炎治疗//x,y是D图像汉字距屏幕左下角(注意不是左上角)的横向和纵向距离。
void GLfont::ShowText(int x, int y, LPCTSTR lpszText)
{
// 保存原投影矩阵,将投影矩阵设为平行投影
glMatrixMode( GL_PROJECTION );
glPushMatrix();
glLoadIdentity();
glOrtho( 0, 640, 0, 480, -1, 1 );
// 保存原模型变换矩阵,平移至( x, y )报春儿歌
glMatrixMode( GL_MODELVIEW );
glPushMatrix();
glLoadIdentity();
RECT rect;
GetClientRect(GetActiveWindow(),&rect);
glTranslatef((float)x,(float)y,0);
HBITMAP hbitmap;
BITMAP bm;
SIZE size;
UCHAR* pBmpBits;
HFONT hOldFont;
HDC hdc = wglGetCurrentDC();
hOldFont = (HFONT)SelectObject(hdc, hFont);
::GetTextExtentPoint32(hdc, lpszText, strlen(lpszText), &size);
hbitmap = , ,1, 1, NULL);
HDC hMemDC = ::CreateCompatibleDC(hdc);
if(hMemDC)
{
HBITMAP hPrevBmp = (HBITMAP)SelectObject(hMemDC,hbitmap);