OpenGL学习笔记(13)位图与文字
来源:互联网 发布:大数据介绍 编辑:程序博客网 时间:2024/05/29 01:52
位图由一个个像素组成,画位图,就是画一个个像素点.如下图
像素点越多,那么图片的清晰度就更高。当然由于让一个人用一个个像素画图片,那真是痛苦...so,只是了解下函数而已.
OpenGL中画位图的三个步骤
一.定位(glRasterPos)
假设你画下一个像素点,那么首先则需要确定位置
二.定义位图的像素点
一个图形由一组像素组成,如下图的F
其像素点由一个数组组成,每行都是一个矩形,如0xc0转成二进制则是11,所以0xc0跟0x00就是从0开始到右侧第2个位置,每行类似.由此这个F的高度为12,宽度为10.
如ff的转换
定义的像素点如下
GLubyte rasters[24] = { 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xff, 0x00, 0xff, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xff, 0xc0, 0xff, 0xc0};
绘制像素点
我们知道正常图片不管放大还是缩小都会变的模糊,为了保持最清晰状态,那么展示的图片跟大小就要跟源高度宽度相符合,所以上面的F高度宽度为12,10
使用glBitmap绘制绘图
glBitmap (10, 12, 0.0, 0.0, 11.0, 0.0, rasters);
第1,2个参数表示宽度与高度
当指定glRasterPos参数时,其坐标点则作为原始的(0,0)坐标点
第3,4个参数表示与相对坐标的位置
绘制多个位图
当一个位图位置完毕后,如果位图没有完成,则继续绘制像素点,当一个位图绘制完成后,可以进行移位,移位后的坐标则成为了起始点,
如上glBitmap的第5,6个参数,表示位移几个像素,由于宽度是10,所以要大于10才不会导致位图重叠,我们将x坐标的间隔改为25,绘制三个F看一下效果,如下
下图解释了glBitmap参数的用法
示例代码
GLubyte rasters[24] = { 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xff, 0x00, 0xff, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xff, 0xc0, 0xff, 0xc0};void init(void){ glPixelStorei (GL_UNPACK_ALIGNMENT, 1); glClearColor (0.0, 0.0, 0.0, 0.0);}void display(void){ glClear(GL_COLOR_BUFFER_BIT); glColor3f (1.0, 1.0, 1.0); glRasterPos2i (20, 20); glBitmap (10, 12, 0.0, 0.0, 25.0, 0.0, rasters); glBitmap (10, 12, 0.0, 0.0, 25.0, 0.0, rasters); glBitmap (10, 12, 0.0, 0.0, 25.0, 0.0, rasters); glFlush(); }
记得先初始化时调用glPixelStorei (GL_UNPACK_ALIGNMENT, 1);
绘制完整的英文字母
首先需要把26个英文字母的像素点给绘制下来,然后保存到各自的显示列表中,并记录显示列表的索引值,然后根据输入的文字,调用相关的显示列表索引值
先看效果
代码示例,像素点真的很晕…
GLubyte space[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};GLubyte letters[][13] = {{0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xc3, 0x66, 0x3c, 0x18}, {0x00, 0x00, 0xfe, 0xc7, 0xc3, 0xc3, 0xc7, 0xfe, 0xc7, 0xc3, 0xc3, 0xc7, 0xfe}, {0x00, 0x00, 0x7e, 0xe7, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe7, 0x7e}, {0x00, 0x00, 0xfc, 0xce, 0xc7, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc7, 0xce, 0xfc}, {0x00, 0x00, 0xff, 0xc0, 0xc0, 0xc0, 0xc0, 0xfc, 0xc0, 0xc0, 0xc0, 0xc0, 0xff}, {0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xfc, 0xc0, 0xc0, 0xc0, 0xff}, {0x00, 0x00, 0x7e, 0xe7, 0xc3, 0xc3, 0xcf, 0xc0, 0xc0, 0xc0, 0xc0, 0xe7, 0x7e}, {0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3}, {0x00, 0x00, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e}, {0x00, 0x00, 0x7c, 0xee, 0xc6, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06}, {0x00, 0x00, 0xc3, 0xc6, 0xcc, 0xd8, 0xf0, 0xe0, 0xf0, 0xd8, 0xcc, 0xc6, 0xc3}, {0x00, 0x00, 0xff, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}, {0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xdb, 0xff, 0xff, 0xe7, 0xc3}, {0x00, 0x00, 0xc7, 0xc7, 0xcf, 0xcf, 0xdf, 0xdb, 0xfb, 0xf3, 0xf3, 0xe3, 0xe3}, {0x00, 0x00, 0x7e, 0xe7, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xe7, 0x7e}, {0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xfe, 0xc7, 0xc3, 0xc3, 0xc7, 0xfe}, {0x00, 0x00, 0x3f, 0x6e, 0xdf, 0xdb, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x66, 0x3c}, {0x00, 0x00, 0xc3, 0xc6, 0xcc, 0xd8, 0xf0, 0xfe, 0xc7, 0xc3, 0xc3, 0xc7, 0xfe}, {0x00, 0x00, 0x7e, 0xe7, 0x03, 0x03, 0x07, 0x7e, 0xe0, 0xc0, 0xc0, 0xe7, 0x7e}, {0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff}, {0x00, 0x00, 0x7e, 0xe7, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3}, {0x00, 0x00, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3}, {0x00, 0x00, 0xc3, 0xe7, 0xff, 0xff, 0xdb, 0xdb, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3}, {0x00, 0x00, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0xc3}, {0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0xc3}, {0x00, 0x00, 0xff, 0xc0, 0xc0, 0x60, 0x30, 0x7e, 0x0c, 0x06, 0x03, 0x03, 0xff}};GLuint fontOffset;void makeRasterFont(void){ GLuint i, j; glPixelStorei(GL_UNPACK_ALIGNMENT, 1); fontOffset = glGenLists (128); for (i = 0,j = 'A'; i < 26; i++,j++) { glNewList(fontOffset + j, GL_COMPILE); glBitmap(8, 13, 0.0, 2.0, 10.0, 0.0, letters[i]); glEndList(); } glNewList(fontOffset + ' ', GL_COMPILE); glBitmap(8, 13, 0.0, 2.0, 10.0, 0.0, space); glEndList();}void init(void){ glShadeModel (GL_FLAT); makeRasterFont();}void printString(char *s){ glPushAttrib (GL_LIST_BIT); glListBase(fontOffset); glCallLists(strlen(s), GL_UNSIGNED_BYTE, (GLubyte *) s); glPopAttrib ();}/* Everything above this line could be in a library * that defines a font. To make it work, you've got * to call makeRasterFont() before you start making * calls to printString(). */void display(void){ GLfloat white[3] = { 1.0, 1.0, 1.0 }; glClear(GL_COLOR_BUFFER_BIT); glColor3fv(white); glRasterPos2i(20, 60); printString("THE QUICK BROWN FOX JUMPS"); glRasterPos2i(20, 40); printString("OVER A LAZY DOG"); glFlush ();}
- OpenGL学习笔记(13)位图与文字
- opengl创建位图文字
- 《OpenGL游戏程序设计》学习笔记---第七章图像、位图与OpenGL
- OpenGL学习笔记:文字显示
- OpenGL:位图与图像
- 位图与文字
- 位图与文字
- 《高效学习OpenGL》 之 位图与字体 glRasterPos(), glWindowPos(), glBitmap()
- OpenGL笔记16 文字绘制
- openGL学习笔记四 : 关于颜色, 大小, 虚线, 多边形反转, 镂空, 使用位图
- [Egret学习笔记 三]Bitmap Font(位图文字)的使用
- 位图操作与OpenGL纹理结合
- OpenGL加载与显示Targa位图文件
- (学习笔记3)BMP位图的读取与显示
- OpenGL学习笔记:拾取与选择
- OpenGL学习笔记与水面波纹实例
- OpenGL学习笔记:拾取与选择
- html css学习笔记-背景与文字
- OpenGL学习笔记(8)显示列表
- OpenGL学习笔记(9)颜色混合
- OpenGL学习笔记(10)抗锯齿
- Surface,SurfaceView,SurfaceHolder及SurfaceHolder.Callback的关系
- OpenGL学习笔记(12)基本光照
- OpenGL学习笔记(13)位图与文字
- OpenGL学习笔记(14)像素操作
- OpenGL读取3DS文件示例(C++语言编写
- 制作一个基于MFC对话框的OpenGL类
- 制作一个基于MFC对话框的OpenGL类
- Mysql千万级别数据优化方案
- MFC对话框的OpenGL类实例之二
- 基于MFC对话框的OpenGL三维图形开发
- GLUT 工具箱函数