OPENGL文字显示

OpengGL教程(一)---OpenGL环境的配置(GLFW3,GLAD) 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);                 
}

C# OpenGl 文字显示 1. 显示列表 index = GL.glGenLists(96); GL.glListBase(index); var hFont = GL.CreateFont( 40, 0, 0, 0, GL.FW_DONTCARE, 0, 0, 0, GL.DEFAULT_CHARSET, G 阅读详情

相关推荐

OpenGL -文字

OpenGL 文字

weixin_45054115的博客 3381

OpenGL 调用FreeType2.0显示文字

本程序是使用FreeType2.0库, 在OpenGL显示文字, 若库文件支持unicode, 则可显示等东亚符, 本程序是本人为嵌入式系统所写的一个原型程序,若加上着色器,便可很容易移植到OPenGL ES2.0

OpenGL实现显示的综合指南

OpenGL(Open Graphics Library)是一个跨语言、跨平台的应用程序编程接口(API),被设计用来渲染2D和3D矢量图形。作为图形领域的行业标准,OpenGL不仅广泛应用于计算机图形学和视频游戏开发,而且它还支持多种类型的硬件设备,包括显卡、CPU和专门的图形处理单元(GPU)。OpenGL的核心功能包括几何变换、视图投影、光线跟踪以及纹理映射,这些都是创建逼真图像的基本要素。通过定义一系列绘图命令,开发者可以利用OpenGL来绘制复杂的三维场景,实现各种视觉效果。

weixin_35756130的博客 671

想要装逼,全靠3D

OpenGL- 创建实时3D图像的编程接口走向3D三维(3D)表示一个正在描述或显示的物体具有3个维度:宽度、高度和深度。例如,放在书桌上的一张画是一个二维物体,因为它没有可以令人感受得到的深度。而旁边的药瓶却能感受到它是3D,因为它具备高度、深度、宽度。几个世纪以来,艺术家们已经知道如何让一幅画有立体感并且具有真实的深度。通过颜料在二维画布上所创作的作品,它其实本质上画的是一个二维物体。类似,计...

weixin_34025051的博客 538

OpenGL显示

很多时候,我们需要在创建的窗口上显示一些提示信息。这个时候我们可用的一种常用方法就是加载一幅包含常用符的bmp图像作为纹理来实现。 下面介绍具体步骤: (1)加载bmp图像作为纹理。 采用的bmp图像Font.bmp: 采用了glaux库。 具体实现参考:加载BMP图像为纹理 (2)创建显示列表 需要注意的是图像Font.bmp大小是256*256,包含两种格式的符,...

mmdev 574

opengl显示文字

在目前的项目中因为有涉及到OpenGL文字输出之类的操作,于是做了一个总结,并把一个库进行了改进,在这里贴出来,希望大家能够在将来的编程中省去一些写细节代码的时间,同时也是抛砖引玉。 首先,要注明的是唐明理先生的开源库还有OpenGL资料是相当宝贵的,也是我见过的许多资料中最好的,如果初学者有了一定的应用水平,看他的这些东西,提高会是飞速的,而且会顺利过渡到框架开发的思维。我们做游戏与图像编程,

编程小生的专栏 1万+

OpenGL总结14-符与文字输出

符基础 符图元基础(根据计算机图形学进行简单的总结): 样:一组符的完整设计风格 体:一组按照特定尺寸和格式的目标符样式 衬线体:易于阅读 无衬线体:易于识别 单一宽度体:每个符大小是相同的,不受符本身的大小影响 比例体:每个符的大小根据自身的大小决定 体的表示有两种方式(OpenGL本身不提供符支持,通过调用window的接口实现): 位图体:与光栅化类似(也叫光栅化体),在网格上用一个一个像素块拼出一个符形状,位图体比较简单,显示时方便,但是位图体对于缩放等

windxgz的博客 1413

OpenGL显示文字

阅读这篇文章前,可以先看一下这个文字显示系列的其他文章,了解一些符编码,体相关的知识:https://blog.csdn.net/wlk1229/article/category/9008450 显示文字 OpenGL提供的是图形API,本身并不提供文字处理方面的接口,如果想要显示文字就需要先将文字转化成图片,然后渲染图片。 Char Map Char Map是最简单的方式,首先...

Wlk1229 1万+

OpenGL: 文字显示

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

Augusdi的专栏 3369

OpenGL 下的文字显示

    一直以来,OpenGL状态下的文字显示都是一个问题,本文使用嵌套显示列表的方式进行OpenGL状态下的符串的显示。     有以下几点需要注意:     1:本程序显示按照给定的高度和文字的位置显示某一种体的文字,其中一些体的参数定义在OpenGLText内部给定,可以随意将它抽出来。如果将代码用于实际应用中,建议文字文字间距自己设定,也可以随意添加文字的倾斜角、旋转角度、

bluebohe的专栏 5343

转载:OpenGL显示文字

转载:OpenGL显示文字 2010年07月03日   本课我们来谈谈如何显示文字。   OpenGL并没有直接提供显示文字的功能,并且,OpenGL也没有自带专门的库。因此,要显示文字,就必须依赖操作系统所提供的功能了。   各种流行的图形操作系统,例如Windows系统和Linux系统,都提供了一些功能,以便能够在OpenGL程序中方便的显示文字。   最常见的方法就是,我们...

zdw624ma 371

OpenGL文字显示

线贴一个简单可用的opengl文字显示调用函数 opengl文字显示大致三步: 1,创建体 2,输出打印 3,删除体 1,创建体的函数: /* * BuildFont * 创建位图体 */ GLvoid BuildFont(GLvoid) { HFONT font; // 体句柄 HFONT oldfont; base

lixiaoguang20的博客 1477

OpenGL 在Windows系统中显示文字

本课我们来谈谈如何显示文字OpenGL并没有直接提供显示文字的功能,并且,OpenGL也没有自带专门的库。因此,要显示文字,就必须依赖操作系统所提供的功能了。各种流行的图形操作系统,例如Windows系统和Linux系统,都提供了一些功能,以便能够在OpenGL程序中方便的显示文字。最常见的方法就是,我们给出一个符,给出一个显示列表编号,然后操作系统由把绘制这个符的OpenGL命令装到指定

痞子龙3D编程 2336

OpenGL: 文本的显示

---- 本文详细讨论了在OpenGL显示文本的几种方法。----也许大多数程序员使用OpenGL更多的是将精力集中于动 态三维图形应用,因此,OpenGL中的文本显示往往被忽视,使人有不见积薪之感。本文 介绍了几种文本显示的方法,希望能对使用OpenGL的编程者有所帮助。建立并修改程序----建立一个MFC SDI Windows应用工程Text,除单文档属 性外,使用其他的所有默认选择。在菜

Augusdi的专栏 4081

opengl文字显示(一)

线贴一个简单可用的opengl文字显示调用函数 opengl文字显示大致三步: 1,创建体 2,输出打印 3,删除体 1,创建体的函数: /* * BuildFont * 创建位图体 */ GLvoid BuildFont(GLvoid) { HFONT font; // 体句柄 HFONT oldfont; bas

shanzhizi的专栏 8489

【转】【OpenGLOpenGL显示文字--显示

OpenGL显示文字--显示 原则上,显示中文和显示英文并无不同,同样是把要显示符做成显示列表,然后进行调用。但是有一个问题,英文字母很少,最多只有几百个,为每个母创建一个显示列表,没有问题。但是汉有非常多个,如果每个汉都产生一个显示列表,这是不切实际的。我们不能在初始化时就为每个符建立一个显示列表,那就只有在每次绘制符时创建它了。当我们需要绘制一个符时,创建对应...

kakarrot2009的专栏 775
上一篇: 指环王OL荣获IGN2008年度编辑选择奖
下一篇: OpenGL显示图片
programking
博客等级 码龄23年 450粉丝 140原创
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值