OpenGL: 文字显示

本文介绍了一种使用OpenGL显示文字的方法,该方法通过glBitmap结合临时DC实现文字的绘制,并介绍了坐标转换技巧。提供了完整的源代码示例。

OpenGL 文字显示

        感谢《学OPENGL编3D游戏》教学课件。这个课件在GAMERES上可以得到。其中有一种显示文字的方法。主要是利用了glBitmap。思路如下:先创建一个临时DC,将文字写到这个DC上。文字背景色为黑色,颜色为白色。这样就得到了文字对应的黑白图,最后把这个黑白图绘制到指定区域。通过在glBitmap之前,用glColor3f指定颜色,最后显示出有颜色的文字。此外,坐标转换也很巧妙:

 glTranslatef(-(420-x)/800,(260-y)/600,-1.0f);

          这个公式,文字的坐标轴原点位于窗口左上角,横坐标向右,纵坐标向下。

附:课件中的源码。

void CGLFont:: settext (float x,float y,CString str,HFONT Font,float r,float g,float b)
{
 glLoadIdentity();
 glPushAttrib(GL_CURRENT_BIT);
 glDisable(GL_TEXTURE_2D);    
 glDisable(GL_LIGHTING);      
 
 //指定颜色
 glColor3f(r,g,b);             
 //坐标转换,移动
 glTranslatef(-(420-x)/800,(260-y)/600,-1.0f);
 //输出文字
 Printftext (0,0, str,Font);   
 
 glEnable(GL_LIGHTING);         
 glEnable(GL_TEXTURE_2D);          
 glPopAttrib();
}

void CGLFont:: Printftext (int x, int y, LPCTSTR lpszText,HFONT hFont)
{
 CBitmap bitmap;      
 BITMAP bm;                           
 SIZE size;                          
 
 HDC MDC = ::CreateCompatibleDC(0);
 SelectObject(MDC,hFont);   
 ::GetTextExtentPoint32(MDC,lpszText,strlen(lpszText),&size);
 
 bitmap.CreateBitmap(size.cx, size.cy, 1, 1, NULL);
 
 HBITMAP oldBmp=(HBITMAP)SelectObject(MDC,bitmap);
 
 SetBkColor  (MDC, RGB(0,     0,   0)); 
 SetTextColor(MDC, RGB(255, 255, 255)); 
 TextOut(MDC, 0, 0, lpszText, strlen(lpszText));
 
 bitmap.GetBitmap(&bm);    
 size.cx = (bm.bmWidth + 31) & (~31);  
 int bufsize =size.cy * size.cx; 
 
 struct {
  BITMAPINFOHEADER bih;
  RGBQUAD col[2];
    }bic;                                 
 BITMAPINFO *binf = (BITMAPINFO *)&bic;       
 binf->bmiHeader.biSize     = sizeof(binf->bmiHeader);
 binf->bmiHeader.biWidth    = bm.bmWidth; 
 binf->bmiHeader.biHeight   = bm.bmHeight; 
 binf->bmiHeader.biPlanes   = 1;         
 binf->bmiHeader.biBitCount = 1;             
 binf->bmiHeader.biCompression = BI_RGB;     
 binf->bmiHeader.biSizeImage   = bufsize; 
 UCHAR* Bits = new UCHAR[bufsize];   
 ::GetDIBits(MDC,bitmap,0,bm.bmHeight,Bits,binf,DIB_RGB_COLORS); 
                                          
 glPixelStorei(GL_UNPACK_ALIGNMENT ,1);
 glRasterPos2i(x,y);                  
 glBitmap(size.cx,size.cy,0,0,0,0,Bits);
 
 delete Bits;                            
 SelectObject(MDC, oldBmp);           
 ::DeleteDC(MDC);                  
}


http://blog.csdn.net/programking/article/details/3907258

摘要 针对便利购超市传统库存管理中人工操作效率低、数据同步滞后、权限边界模糊、流程不规范等问题,为实现库存管理的数字化、规范化与智能化,提升多角色协同效率,本文设计并实现了一套适配中小型超市实际业务的库存信息管理平台。研究以问题为导向,遵循调研分析 - 设计开发 - 测试优化的软件开发流程,先通过文献研究与实地调研梳理核心技术要点与业务需求,明确管理员、库管、一线员工三类角色的功能边界;再基于 Vue+Spring Boot+MyBatis 技术栈搭建前后端分离架构,结合 RBAC 角色权限模型与数据库第三范式完成系统整体设计,涵盖需求分析、架构设计、功能模块设计、接口与权限控制设计、界面原型设计等环节;随后完成平台前后端开发实现,实现商品及类别管理、库存预警、出入库与报损管理、全局库存管控等九大核心功能,同时针对开发中的权限控制、数据一致性、接口交互等问题提出针对性解决策略;最后通过功能、性能、兼容性多维度测试验证系统有效性。测试结果表明,该平台实现了库存管理全流程的线上化,可实现多角色权限的精细化管控、库存数据的实时同步与预警信息的即时推送,有效解决了传统库存管理的痛点,提升了超市库存管理的效率与精准度。系统兼具良好的稳定性、易用性与可扩展性,可为中小型零售超市的库存数字化管理提供技术支撑与实践参考,后续可进一步拓展数据分析、智能补货等功能,提升平台的智能化水平。 关键词:库存预警;超市;MyBatis
内容概要:本文研究了改进深度优先搜索算法与二进制粒子群优化算法相结合在配电网故障恢复重构中的应用,旨在提升故障后网络重构的效率与供电可靠性。通过引入改进的深度优先搜索算法高效生成满足辐射状约束的可行拓扑结构,并结合二进制粒子群算法进行全局优化,实现对开关操作序列的智能决策。文中系统阐述了两种算法的协同机制、适应度函数构建、配电网约束处理(如潮流平衡、电压限值、容量限制)以及孤岛与环网的规避策略,提出了一套完整的故障恢复重构流程。基于Matlab平台的仿真验证表明,该方法能在较短时间内找到高质量的恢复方案,有效恢复失电负荷,避免不合理的网络结构,具有较强的实用性和鲁棒性。; 适合人群:具备电力系统分析基础和Matlab编程能力,从事智能电网、配电自动化、故障诊断与恢复、电力系统优化等方向的科研人员及工程技术人员。; 使用场景及目标:①应对配电网突发故障,快速制定最优网络重构方案以最大化恢复供电范围;②优化故障后开关操作策略,降低停电损失和运行风险;③为配电管理系统(DMS)和自愈控制系统提供高效的算法支撑;④研究启发式算法与图搜索算法在复杂电力网络优化中的融合应用; 阅读建议:建议读者结合Matlab代码深入理解算法实现细节,重点关注深度优先搜索在拓扑可行性校验中的作用以及粒子群算法在离散空间优化中的编码与更新策略,可通过调整网络模型、故障场景和算法参数进行对比实验,以全面掌握其性能特点与适用边界。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值