OpenGL中的FLY小程序
来源:互联网 发布:java面试简历项目流程 编辑:程序博客网 时间:2024/06/16 06:41
程序运行图示
1.程序说明
本程序为OpenGL中的FLY小程序,通过设置一种样式来填充多边形。如图填充了三种样式的图案,一个是一个标志,一个是一些苍蝇,一个是一面沙墙,外围是一个绿色的框。
2.实现代码和步骤
#include <gl/glut.h>//glut工具包 #include <stdio.h> /* 苍蝇的镂空样式 */ static GLubyte Fly[128] = //128字节的数组共32 * 32位,代表了一个32*32的矩阵 { 0x00, 0x00, 0x00, 0x00, // 这是最矩阵下面的一行, 1为一个黑色像素,0表示白色 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x01, 0xC0, 0x06, 0xC0, 0x03, 0x60, 0x04, 0x60, 0x06, 0x20, 0x04, 0x30, 0x0C, 0x20, 0x04, 0x18, 0x18, 0x20, 0x04, 0x0C, 0x30, 0x20, 0x04, 0x06, 0x60, 0x20, 0x44, 0x03, 0xC0, 0x22, 0x44, 0x01, 0x80, 0x22, 0x44, 0x01, 0x80, 0x22, 0x44, 0x01, 0x80, 0x22, 0x44, 0x01, 0x80, 0x22, 0x44, 0x01, 0x80, 0x22, 0x44, 0x01, 0x80, 0x22, 0x66, 0x01, 0x80, 0x66, 0x33, 0x01, 0x80, 0xCC, 0x19, 0x81, 0x81, 0x98, 0x0C, 0xC1, 0x83, 0x30, 0x07, 0xE1, 0x87, 0xE0, 0x03, 0x3F, 0xFC, 0xC0, 0x03, 0x31, 0x8C, 0xC0, 0x03, 0x3F, 0xFC, 0xC0, 0x06, 0x64, 0x26, 0x60, 0x0C, 0xCC, 0x33, 0x30, 0x18, 0xCC, 0x33, 0x18, 0x10, 0xC4, 0x23, 0x08, 0x10, 0x63, 0xC6, 0x08, 0x10, 0x30, 0x0C, 0x08, 0x10, 0x18, 0x18, 0x08, 0x10, 0x00, 0x00, 0x08 // 这是最上面的一行 }; /* halftone镂空样式 */ GLubyte Halftone[] = { 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55 }; static GLubyte Benchi[128]; void myDisplay(void) { /* 载入Benchi.bmp 图片,将其像素信息放入Benchi数组,然后可设置Polygon样式为Benchi */ FILE *fp; fp = fopen("Benchi.bmp", "rb"); if( !fp ) exit(0); if( fseek(fp, -(int)sizeof(Benchi), SEEK_END) ) exit(0); if( !fread(Benchi, sizeof(Benchi), 1, fp) ) exit(0); fclose(fp); glClear(GL_COLOR_BUFFER_BIT); /* 画一个长1.2,宽0.4的空矩形,线宽为5.0 */ glPolygonMode(GL_FRONT, GL_LINE); glColor3f(0.6, 0.8, 0.5); glLineWidth(5.0f); glRectf(-0.6, 0.0, 0.6, 0.4); glPolygonMode(GL_FRONT, GL_FILL); /* 激活POLYGON_STIPPLE */ glEnable(GL_POLYGON_STIPPLE); //让镂空的效果有效 glPolygonStipple(Fly);//设置苍蝇镂空样式,并画一个四边形显示效果 glBegin(GL_POLYGON); glColor3f(0.0f, 1.0f, 1.0f); glVertex2f(-0.2, 0.0); glVertex2f(0.2, 0.0); glVertex2f(0.2, 0.4); glVertex2f(-0.2, 0.4); glEnd(); glPolygonStipple(Halftone);//设置halftone镂空样式,并画一个四边形显示效果 glBegin(GL_POLYGON); glColor3f(0.5f, 0.5f, 0.5f); glVertex2f(0.2, 0.0); glVertex2f(0.6, 0.0); glVertex2f(0.6, 0.4); glVertex2f(0.2, 0.4); glEnd(); glPolygonStipple(Benchi);//设置Benchi(从文件读取)镂空样式,并画一个四边形显示效果 glBegin(GL_POLYGON); glColor3f(0.8f, 0.9f, 0.9f); glVertex2f(-0.6, 0.0); glVertex2f(-0.2, 0.0); glVertex2f(-0.2, 0.4); glVertex2f(-0.6, 0.4); glEnd(); glDisable(GL_POLYGON_STIPPLE); glFlush(); } int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glutInitWindowPosition(300, 200); glutInitWindowSize(800, 600); glutCreateWindow("fly"); glutDisplayFunc(&myDisplay); glutMainLoop(); return 0; } 3.具体细节 通过开启多边形镂空样式,可以选择镂空的图形,可以自己定义一个图形,也可以载入一个32*32的bmp图形文件。因为这个图形是32*32的像素模式,所以刚好可以用128个字节来存储,一位代表一个像素,1代表黑色,0代表白色(当然黑色可以换成别的颜色)。这个128个字节的数组具体是这样表示一个32*32的图形的: 首先4个字节为一行,这样一行刚好32位,一位代表一个像素,一共32行, 数组的第一行对应图像的第一排像素,最后一行对应图像的第一行像素,那么就是对应一个32*32的数组了。 如果是载入一个图片的话,可以通过读取它然后将其放入一个128字节的数组,然后和上面是一样的。
- OpenGL中的FLY小程序
- Fly小助手0.1 ——瞎写的程序
- opengl小程序
- openGL入门小程序
- opengl中的小问题解决
- Fly小助手0.2预告
- OpenGL画圆简洁小程序
- OpenGL: 点阵显示生日快乐小程序
- 第一个 OpenGL ES的小程序
- python+opengl显示三维模型小程序
- 小程序中的小问题
- 程序中的小方法
- 小程序中的单位
- 小程序中的block
- C#中的延时小程序
- 小程序开发中的问题
- 小程序中的websocket 使用
- 小程序中的ES6 Class
- java GUI 1:事件处理及图形操作
- 有码才有真相
- POJ3041 Asteroids
- 海康威视采集卡结合opencv使用(两种方法)
- Python多线程(1)
- OpenGL中的FLY小程序
- Ubuntu下insight错误解决
- 需要这样的软件
- 基于对话框文档中使用菜单&弹出右键菜单时,无法更新菜单显示
- ubuntu下查找包的安装路径
- chrome sandbox中的几个有用函数
- tcl/tk的安装
- 从电话薄中读取电话
- 上海--我来了