WINCE使用OpengL ES 显示文字的实现
2011年04月01日
使用OpengL ES 显示文字对opengl es 初学者来说,可谓一个不大不小的麻烦。有人是利用了Opengl ES API封装了一些dll库来实现,例如glfont,不过用起来就像浮云,很不灵活。这里简单描述下,我在wince上实现opengl es显示文字的思路。显示文字的实质其实也就是显示一张纹理,显示一个纹理很简单,那么我们的重点即是如何产生一个上面写有文字的纹理。 实现的思路是这样的: 1.创建一张与设备相关的GDI位图。 2.创建一个兼容DC,把步骤1创建的位图选入到DC中。 3.调用GDI,DrawText等把文字画到步骤2创建的DC上(可以用Truetype实现更加平滑的漂亮文字)。 4.利用此已画好文字的DC,再创建一个设备无关的位图,并用其像素数据生成纹理。 补充:对于需要把文字写在一个底图上的情况,我想也不用多述了吧,需要进行透明的文字显示时,亦可在此思路上略做补充就得了。 下面给出参考代码,注意代码的组织顺序跟我上面说的思路有点出入。 bool CDrawText::CreateText(CString strText,GLuint *id) //创建文字纹理无底图 { CRect TextOffsetRect; if(m_bDown) TextOffsetRect = m_ActiveOffsetRect; else TextOffsetRect = m_OffsetRect; int TextWidth = m_EffectRect.Width(); //图片宽度 int TextHeight = m_EffectRect.Height(); //图片高度 CFont m_font; m_font.CreateFont(m_FontSize, /*Attach(GetHDC()); //定义指向DIB数据区的指针 BYTE *lpBitmapBits = NULL; CDC dcMem; //绘制最终结果的DC dcMem.CreateCompatibleDC(pDC); HDC hMemDC = dcMem.GetSafeHdc(); BITMAPINFO bitInfo; bitInfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER); bitInfo.bmiHeader.biWidth=TextWidth; bitInfo.bmiHeader.biHeight=-TextHeight; bitInfo.bmiHeader.biPlanes=1; bitInfo.bmiHeader.biBitCount=24; bitInfo.bmiHeader.biCompression=BI_RGB; bitInfo.bmiHeader.biSizeImage=0; bitInfo.bmiHeader.biXPelsPerMeter=0; bitInfo.bmiHeader.biYPelsPerMeter=0; bitInfo.bmiHeader.biClrUsed=0; bitInfo.bmiHeader.biClrImportant=0; bitInfo.bmiColors[0].rgbBlue=255; bitInfo.bmiColors[0].rgbGreen=255; bitInfo.bmiColors[0].rgbRed=255; bitInfo.bmiColors[0].rgbReserved=255; //创建位图 HBITMAP directBmp = CreateDIBSection(hMemDC, (BITMAPINFO*)&bitInfo, DIB_RGB_COLORS, (void **)&lpBitmapBits, NULL, 0); HGDIOBJ previousObject = SelectObject(hMemDC, directBmp); CBitmap bmp; bmp.CreateCompatibleBitmap(pDC,TextWidth,TextHeigh t); CDC dcBmp; //后台绘制图片的DC,最终要将此DC Blt到dcMem中 dcBmp.CreateCompatibleDC(pDC); CBitmap* COldBitamp = (CBitmap*)dcBmp.SelectObject(&bmp); HDC hBmpDC = dcBmp.GetSafeHdc(); /* img.Draw2(dcBmp.GetSafeHdc(),0,0,iImgWidth,iImgHei ght); //绘制图片到BmpDC中*/ dcBmp.FillSolidRect(CRect(0,0,TextWidth,TextHeight ),m_BackColor); int len=strText.GetLength(); CFont* COldFont = (CFont*)dcBmp.SelectObject(&m_font); dcBmp.SetBkMode(TRANSPARENT); if(!m_bDown) dcBmp.SetTextColor(m_FontColor); else dcBmp.SetTextColor(m_ActiveFontColor); dcBmp.DrawText(strText,len,&TextOffsetRect,m_uAlig n); BitBlt(hMemDC,0,0,TextWidth,TextHeight,hBmpDC,0,0, SRCCOPY); int tmpPower = 2; bool bGetW = false,bGetH = false; while (true) { if (TextWidth > 3;//左移三位即除以8,获取图像每像素字节数 int linepos = 0; for (int i=m_wBkImgy-1;i>=m_wBkImgy-TextHeight;i--)// { lpLine = lpData + (linepos++) * nPitch; for(int j = 0; j Detach(); pDC->DeleteDC(); delete pDC; return true; }
发表评论
-
用OpenInventor实现的NeHe OpenGL教程-第二十四课
2012-01-20 08:50 885用OpenInventor实现的NeHe OpenGL教程-第 ... -
OpenGL的位图和图像
2012-01-20 08:50 869OpenGL的位图和图像 2011年05月20日 OPE ... -
OpenGL文字显示
2012-01-20 08:50 1031OpenGL文字显示 2010年06月22日 本文参考N ... -
使用web.py创建一个blog
2012-01-20 08:50 1036使用web.py创建一个blog 2011年03月14日 ... -
See丶小莫
2012-01-19 13:55 414See丶小莫 2011年04月16日 ... -
宝贝的和我的,我会努力去磨合的
2012-01-19 13:55 533宝贝的和我的,我会努力去磨合的 2011年12月29日 ... -
12星座的怒点
2012-01-19 13:55 48012星座的怒点 2011年11月21日 白羊(跟你讲你不 ... -
linux下服务说明<转>
2012-01-17 03:45 568linux下服务说明 2011年12月13日 我的Cen ... -
Win 7服务详解及其建议
2012-01-17 03:45 777Win 7服务详解及其建议 2012年01月06日 Wi ... -
2011-12-21
2012-01-17 03:44 5972011-12-21 2011年12月21日 一、高级 ... -
2011-12-11
2012-01-17 03:44 5192011-12-11 2011年12月11日 ... -
2011-11-30
2012-01-17 03:44 4852011-11-30 2011年11月30日 ... -
小学语文教学随笔
2012-01-16 02:22 582小学语文教学随笔 2011 ... -
笑死作文
2012-01-16 02:22 580笑死作文 2011年11月28日 星期一到了……小英在交 ... -
小学回忆录
2012-01-16 02:21 446小学回忆录 2011年12月16 ... -
可爱小弟(六)
2012-01-16 02:21 488可爱小弟(六) 15小时前 这 ... -
眯噜作文,呵呵
2012-01-16 02:21 497眯噜作文,呵呵 2011年12 ...
相关推荐
1.基于WinCE的OpenGL ES教程 2.基本 - 1:初始化EGL 3.深入 - 1:压缩纹理 4.提高-2:材质纹理 5.Maya教程 :用MEL导出3D模型 6.基本-2:初始化GLES--源码
WinCE mobile openGL ES WinCE mobile openGL ES WinCE mobile openGL ES WinCE mobile openGL ES
基于WinCE的OpenGL ES教程(有两个教程,一个是E文版的,开发环境是EVC4.0;另一个教程是网页版的,开发环境是VS2005的) 绝对有料!
WINCE opengl es 超值教程 超好用
Wince opengles example Wince opengles example Wince opengles example Wince opengles example
2011.11.10.1.ESDlg_First.rar压缩包采用了全屏显示,去标题栏,通过点击屏幕退出程序,实现了纹理的加载,显示的三维图像在屏幕的中间,并且旋转。能够在友善6410开发板上运行,但是里面没有包含支持OpenGLES的...
WinCE 下的OpenGL ES的灯火应用的原代码 Lighting.rar
WINCE Opengles 教程,英文,带EVC4.0源代码。
ARM wince opengles dll lib 和.h
csdn上有人标10分实在不厚道,这是网页版的,教程针对evc4.0以及vs2005的OpenGL相关说明。
使用OPENGL|ES在嵌入式 图形系统 中显示128个ASCII的2D纹理字符,使字符显示不受系统字库,函数库等束缚。 该为GLFONTES FOR WINCE 网站: http://code.google.com/p/glfontes/
用于wince上开发3D游戏,可以在win4.2以上平台运行。包含运行库、说明和例子。
EVC4.0环境下WinCE Opengles教程(英文带源代码): 1.Tutorial 1- WinCE-OpenGL ES Initialization 2.Tutorial 2- Shapes- perspective-basic user input 3.Tutorial 3-Texturing and multitexturing ......
OpenGL ES 1.0 教程 很多简单的例子 WinCE
一个WinCE 下的OpenGL ES的应用的原代码,值到学习
OpenGLES1.1的头文件与DLL,在wince平台下可用。其他平台未验证
opengl es中射线拾取对象,可动态拾取!
三星6410 opengl es 开发包 sdk,可以在wince 平台开发
三星6410 opengl es 开发包 sdk,可以在wince 平台开发
OpenGL_ES基础入门 OpenGL_ES基础入门 OpenGL_ES基础入门