资源简介
OpenGL使用Window API绘制矢量字体(非常简单)

代码片段和文件信息
#include “Font.h“
bool CFontPrinter::makeChar(wchar_t wChar)
{
HDC hdc = CreateCompatibleDC(wglGetCurrentDC());
if(!hdc)
return false;
HBITMAP hbitmap = CreateCompatibleBitmap(hdc 1 1);
HBITMAP hbitmapOld = (HBITMAP)Selectobject(hdc hbitmap);
if((DWORD)hbitmapOld == GDI_ERROR)
return false;
CFontData* fontData = new CFontData();
glGenTextures(1 &fontData->m_TextureID);
glBindTexture(GL_TEXTURE_2D fontData->m_TextureID);
glTexParameteri(GL_TEXTURE_2D GL_TEXTURE_MIN_FILTER GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D GL_TEXTURE_MAG_FILTER GL_LINEAR);
glTexEnvi(GL_TEXTURE_ENV GL_TEXTURE_ENV_MODE GL_MODULATE);
glPixelStorei(GL_UNPACK_SWAP_BYTES GL_FALSE);
glPixelStorei(GL_UNPACK_LSB_FIRST GL_FALSE);
glPixelStorei(GL_UNPACK_ROW_LENGTH 0);
glPixelStorei(GL_UNPACK_SKIP_ROWS 0);
glPixelStorei(GL_UNPACK_SKIP_PIXELS 0);
glPixelStorei(GL_UNPACK_ALIGNMENT 1);
int iTexWidth = m_FontSize;
int iTexHeight = m_FontSize;
int iLevel = 0;
if (!m_Font)
{
// 创建文字
m_Font = CreateFontW(-m_FontSize 0 0 0 500 false false false
DEFAULT_CHARSET OUT_TT_ONLY_PRECIS CLIP_DEFAULT_PRECIS
DEFAULT_QUALITY DEFAULT_PITCH | (m_FontName?FF_DONTCARE:FF_SWISS) m_FontName);
}
if(!m_Font)
return false;
HFONT hfontOld = (HFONT)Selectobject(hdc m_Font);
if((DWORD)hfontOld == GDI_ERROR)
return false;
GLYPHMETRICS gm={0};
MAT2 const matrix22_identity={{01}{00}{00}{01}};
DWORD dwBuffSize = GetGlyphOutlineW(hdc wChar GGO_GRAY8_BITMAP &gm 0 NULL &matrix22_identity);
if((signed)dwBuffSize == -1)
{
return false;
}
if(GetGlyphOutlineW(hdc wChar GGO_METRICS &gm 0 NULL &matrix22_identity)==GDI_ERROR)
{
return false;
}
BYTE *pBuff = new BYTE[dwBuffSize];
BYTE *pSwapBuff=new BYTE[dwBuffSize];
memset(pBuff 0xff dwBuffSize);
memset(pSwapBuff 0xff dwBuffSize);
if(GetGlyphOutlineW(hdc wChar GGO_GRAY8_BITMAP &gm dwBuffSize pBuff &matrix22_identity) == GDI_ERROR)
{
delete[] pBuff;
return false;
}
if(gm.gmBlackBoxY == 0)
{
printf(“black box Y zero!!!\n“);
return false;
}
// 从 Gray64 转换到 Gray256
unsigned int const uiRowSize = dwBuffSize / gm.gmBlackBoxY;
BYTE* pPtr;
BYTE* pSPtr;
for(unsigned int nY = 0; nY < gm.gmBlackBoxY; nY++)
{
pPtr = pBuff + uiRowSize * nY;
pSPtr = pSwapBuff + gm.gmBlackBoxX * nY;
for (unsigned int nX = 0; nX < gm.gmBlackBoxX; nX++)
{
if (*pPtr == 0)
{
*pSPtr = 0;
}
else if (*pPtr == 0x40)
{
*pSPtr = 0xff;
}
else
{
*pSPtr = *pPtr << 2;
}
pPtr++;
pSPtr++;
}
}
// 加载纹理
glTexImage2D(GL_TEXTURE_2D iLevel GL_LUMINANCE8 gm.gmBlackBoxX gm.gmBlackBoxY 0 GL_LUMINANCE GL_UNSIGNED_BYTE pSwapBuff);
// 记录文字信息
fontData->m_FontWidth = (float)gm.gmCellIncX / (float)m_FontSize;
fontData->m_Width = (float)gm.gmBlackBoxX / (float)m_FontSize;
fontData->m_Height = (float)g
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 6126 2014-08-21 13:59 FontDemo\FontDemo\Debug\BuildLog.htm
文件 4676 2014-08-21 13:51 FontDemo\FontDemo\Font.cpp
文件 1083 2014-08-21 13:14 FontDemo\FontDemo\Font.h
文件 7354 2014-08-21 14:09 FontDemo\FontDemo\FontDemo.cpp
文件 3602 2014-08-21 14:00 FontDemo\FontDemo\FontDemo.vcproj
文件 1415 2014-08-21 17:09 FontDemo\FontDemo\FontDemo.vcproj.TianYu-PC.TianYu.user
文件 6202 2014-08-21 16:45 FontDemo\FontDemo\Release\BuildLog.htm
文件 890 2014-08-20 13:37 FontDemo\FontDemo.sln
..A..H. 23552 2014-08-21 17:09 FontDemo\FontDemo.suo
目录 0 2014-08-21 16:43 FontDemo\FontDemo\Debug
目录 0 2014-08-21 17:08 FontDemo\FontDemo\Release
目录 0 2014-08-21 17:08 FontDemo\Debug
目录 0 2014-08-21 14:09 FontDemo\FontDemo
目录 0 2014-08-21 17:08 FontDemo\Release
目录 0 2014-08-21 17:09 FontDemo
----------- --------- ---------- ----- ----
54900 15
- 上一篇:波士顿房价数据集 csv格式
- 下一篇:数字逻辑拔河游戏机设计
相关资源
- OpenGL参考手册
- Qt Creator opengl实现四元数鼠标控制轨迹
- OpenGL文档,api大全,可直接查询函数
- opengl轮廓字体源代码
- MFC读三维模型obj文件
- 利用OpenGL写毛笔字算法
- MFC中OpenGL面和体的绘制以及动画效果
- 基于OPENGL的光线跟踪源代码368758
- VC 实现三维旋转(源码)
- 自编用openGL实现3D分形树,分形山
- OpenGL球形贴图自旋程序
- OpenGL导入贴图的Texture类
- 计算机图形学(openGL)代码
- 用OpenGL开发的机械臂运动仿真程序(
- OpenGL-3D坦克模拟
- OPENGL实现世界上最小的3D游戏
- VS2012OpenGL配置所需要的全部libdllh文件
- 基于OpenGL的仿蝗虫机器人三维动态仿
- 图形学 - OpenGL实现3种三维茶壶显示源
- opengl程序-会跳舞的骷髅
- opengl实现三维网格光顺Laplacian算法
- opengl——爆炸
- OpenGL三维地形建模
- opengl游戏编程徐明亮版(含源码)
- 用OPENGL画的一个简单的直升飞机
- opengl完美天空盒
- 3D绘图程序设计:使用Direct3D 10/9和Ope
- OpenGL绘制可运动自行车源程序.zip
- OpenGL实现飘动效果
- opengl室内场景的绘制,包括碰撞检测
评论
共有 条评论