OpenGL--位图
来源:互联网 发布:java 多态 编辑:程序博客网 时间:2024/05/21 08:02
理论基础
位图:就是对应一些二进制位来操作像素,0则表对应像素不绘制,1表绘制,这样来模拟绘制图像。一般可以用来绘制字符,但位图无法做缩放或旋转等特效。位图示例图如下:注:在opengl 3.0以后基本废弃了。
- 实例代码
#include "GLTools.h"#include "GLShaderManager.h"#ifdef __APPLE__#include <glut/glut.h>#else#define FREEGLUT_STATIC#include <GL/glut.h>#endif//空格的位图GLubyte space[] ={0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};//26个字母的位图(二进制0对应像素不绘制,1则绘制)GLubyte letters[26][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; /*设置像素的储存模式,参数1包括:GL_PACK_ALIGNMENT:打包 与GL_UNPACK_ALIGNMENT:解包两种。参数2是对齐方式,如这里 是取字母,一个字母占1字节,所以以1字节对齐*/ glPixelStorei(GL_UNPACK_ALIGNMENT, 1); fontOffset = glGenLists (128);//申请了128个索引作为显示列表标志 for (i = 0,j = 'A'; i < 26; i++,j++) { glNewList(fontOffset + j, GL_COMPILE);//以字母对应的ASCII码作为索引标志 glBitmap(8, 13, 0.0, 2.0, 10.0, 0.0, letters[i]);//绘制26个字母位图 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);//指定偏移量 /*参数:执行strlen(s)个显示列表,对应执行的 显示列表索引值 = *s + 对应偏移(按字节递加)*/ glCallLists(strlen(s), GL_UNSIGNED_BYTE, (GLubyte *) s);//一次执行多个显示列表 glPopAttrib ();}void display(void){ GLfloat white[3] = { 1.0, 1.0, 1.0 }; glClear(GL_COLOR_BUFFER_BIT); glColor3fv(white); glRasterPos2i(25, 60);//光栅位置 printString("THE QUICK BROWN FOX JUMPS"); glRasterPos2i(25, 40); printString("OVER A LAZY DOG"); glFlush ();}void reshape(int w, int h){ glViewport(0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho (0.0, w, 0.0, h, -1.0, 1.0); glMatrixMode(GL_MODELVIEW);}int main(int argc, char** argv){ glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowSize(300, 100); glutInitWindowPosition (100, 100); glutCreateWindow(argv[0]); init(); glutReshapeFunc(reshape); glutDisplayFunc(display); glutMainLoop(); return 0;}
0 0
- opengl位图
- OpenGL--位图
- OpenGL位图和图像
- OpenGL:位图与图像
- opengl创建位图文字
- OpenGL: glBitmap光栅位图
- OpenGL位图操作
- OpenGL: 位图字体
- 位图、图像(openGL)
- OpenGL -- 位图 glBitmap
- 14.OpenGL--位图
- android opengl es 位图字体
- OpenGL的位图和图像
- OpenGL中位图的操作
- opengl入门系列-位图字体
- opengl 中 位图的操作
- OPENGL的位图和图象
- Nehe OpenGL教程第十三课 位图字体
- UART接口
- Kernel development
- DPM(Deformable Parts Model)--原理(一)
- nyoj247 虚拟城市的旅行(spfa)
- ORACLE_基础二十三(User-Managed Recovery)
- OpenGL--位图
- DPM(Defomable Parts Model) 源码分析-训练(三)
- 第一篇 为什么要写这个博客
- Android学习笔记之布局
- G.729A--编码--主函数
- boost::bind参数例子使用
- HDU 1081 To The Max
- 终于还是换到了这个新博客
- git 创建 .gitignore 文件 建立项目过滤规则