BITMAP1.C
上传用户:tengyuc
上传日期:2007-08-14
资源大小:722k
文件大小:5k
源码类别:

OpenGL

开发平台:

Visual C++

  1. #include <stdio.h> #include <string.h> #include <stdlib.h> #include <GL/glut.h> #define OPENGL_WIDTH 24 #define OPENGL_HEIGHT 13 GLenum rgb, doubleBuffer; float boxA[3] = {0, 0, 0}; float boxB[3] = {-100, 0, 0}; float boxC[3] = {100, 0, 0}; float boxD[3] = {0, 95, 0}; float boxE[3] = {0, -105, 0}; GLubyte OpenGL_bits1[] = {    0x00, 0x03, 0x00,    0x7f, 0xfb, 0xff,    0x7f, 0xfb, 0xff,    0x00, 0x03, 0x00,    0x3e, 0x8f, 0xb7,    0x63, 0xdb, 0xb0,    0x63, 0xdb, 0xb7,    0x63, 0xdb, 0xb6,    0x63, 0x8f, 0xf3,    0x63, 0x00, 0x00,    0x63, 0x00, 0x00,    0x63, 0x00, 0x00,    0x3e, 0x00, 0x00, }; GLubyte OpenGL_bits2[] = {    0x00, 0x00, 0x00,    0xff, 0xff, 0x01,    0xff, 0xff, 0x01,     0x00, 0x00, 0x00,    0xf9, 0xfc, 0x01,     0x8d, 0x0d, 0x00,    0x8d, 0x0d, 0x00,     0x8d, 0x0d, 0x00,    0xcc, 0x0d, 0x00,     0x0c, 0x4c, 0x0a,    0x0c, 0x4c, 0x0e,     0x8c, 0xed, 0x0e,    0xf8, 0x0c, 0x00,  }; GLubyte logo_bits[] = {    0x00, 0x66, 0x66,     0xff, 0x66, 0x66,     0x00, 0x00, 0x00,     0xff, 0x3c, 0x3c,     0x00, 0x42, 0x40,     0xff, 0x42, 0x40,     0x00, 0x41, 0x40,     0xff, 0x21, 0x20,     0x00, 0x2f, 0x20,     0xff, 0x20, 0x20,     0x00, 0x10, 0x90,     0xff, 0x10, 0x90,     0x00, 0x0f, 0x10,     0xff, 0x00, 0x00,     0x00, 0x66, 0x66,     0xff, 0x66, 0x66,  }; static void Init(void) {     if (!rgb) { glutSetColor(0, 0.0, 0.0, 0.0); glutSetColor(1, 1.0, 0.0, 0.0); glutSetColor(2, 0.0, 1.0, 0.0); glutSetColor(3, 1.0, 1.0, 0.0); glutSetColor(4, 0.0, 0.0, 1.0); glutSetColor(5, 1.0, 0.0, 1.0); glutSetColor(6, 0.0, 1.0, 1.0); glutSetColor(7, 1.0, 1.0, 1.0);     }     glClearColor(0.0, 0.0, 0.0, 0.0);     glClearIndex(0.0); } static void Reshape(int width, int height) {     glViewport(0, 0, width, height);     glMatrixMode(GL_PROJECTION);     glLoadIdentity();     gluOrtho2D(-175, 175, -175, 175);     glMatrixMode(GL_MODELVIEW); } static void Key(unsigned char key, int x, int y) {     switch (key) {       case 27: exit(0);     } } static void Draw(void) {     glClear(GL_COLOR_BUFFER_BIT); //  指定像素操作的光栅位置     glRasterPos3fv(boxA);
  2. //  设置像素存储格式     glPixelStorei(GL_UNPACK_ROW_LENGTH, 24);     glPixelStorei(GL_UNPACK_SKIP_PIXELS, 8);     glPixelStorei(GL_UNPACK_SKIP_ROWS, 2);     glPixelStorei(GL_UNPACK_LSB_FIRST, GL_FALSE);     glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
  3. //  绘制位图     glBitmap(16, 12, 8.0, 0.0, 0.0, 0.0, logo_bits);           glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);     glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0);     glPixelStorei(GL_UNPACK_SKIP_ROWS, 0);     glPixelStorei(GL_UNPACK_LSB_FIRST, GL_TRUE);     glPixelStorei(GL_UNPACK_ALIGNMENT, 1); //  绘制位图1     (rgb) ? glColor3f(1.0, 1.0, 1.0) : glIndexi(7);     glRasterPos3fv(boxB);     glBitmap(OPENGL_WIDTH, OPENGL_HEIGHT, OPENGL_WIDTH, 0.0, OPENGL_WIDTH, 0.0,      OpenGL_bits1);     glBitmap(OPENGL_WIDTH, OPENGL_HEIGHT, OPENGL_WIDTH, 0.0, OPENGL_WIDTH, 0.0,      OpenGL_bits2); //  绘制位图2     (rgb) ? glColor3f(0.0, 1.0, 1.0) : glIndexi(6);     glRasterPos3fv(boxC);     glBitmap(OPENGL_WIDTH, OPENGL_HEIGHT, OPENGL_WIDTH, 0.0, OPENGL_WIDTH, 0.0,      OpenGL_bits1);     glBitmap(OPENGL_WIDTH, OPENGL_HEIGHT, OPENGL_WIDTH, 0.0, OPENGL_WIDTH, 0.0,      OpenGL_bits2); //  绘制位图3     (rgb) ? glColor3f(1.0, 0.0, 1.0) : glIndexi(5);     glRasterPos3fv(boxD);     glBitmap(OPENGL_WIDTH, OPENGL_HEIGHT, OPENGL_WIDTH, 0.0, OPENGL_WIDTH, 0.0,      OpenGL_bits1);     glBitmap(OPENGL_WIDTH, OPENGL_HEIGHT, OPENGL_WIDTH, 0.0, OPENGL_WIDTH, 0.0,      OpenGL_bits2); //  绘制位图4     (rgb) ? glColor3f(1.0, 1.0, 0.0) : glIndexi(3);     glRasterPos3fv(boxE);     glBitmap(OPENGL_WIDTH, OPENGL_HEIGHT, OPENGL_WIDTH, 0.0, OPENGL_WIDTH, 0.0,      OpenGL_bits1);     glBitmap(OPENGL_WIDTH, OPENGL_HEIGHT, OPENGL_WIDTH, 0.0, OPENGL_WIDTH, 0.0,      OpenGL_bits2);     if (doubleBuffer) { glutSwapBuffers();     } else { glFlush();     } } static void Args(int argc, char **argv) {     GLint i;     rgb = GL_TRUE;     doubleBuffer = GL_FALSE;     for (i = 1; i < argc; i++) { if (strcmp(argv[i], "-ci") == 0) {     rgb = GL_FALSE; } else if (strcmp(argv[i], "-rgb") == 0) {     rgb = GL_TRUE; } else if (strcmp(argv[i], "-sb") == 0) {     doubleBuffer = GL_FALSE; } else if (strcmp(argv[i], "-db") == 0) {     doubleBuffer = GL_TRUE; }     } } int main(int argc, char **argv) {     GLenum type;     glutInit(&argc, argv);     Args(argc, argv);     type = (rgb) ? GLUT_RGB : GLUT_INDEX;     type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;     glutInitDisplayMode(type);     glutInitWindowSize(300, 300);     glutCreateWindow("Bitmap Test");     Init();     glutReshapeFunc(Reshape);     glutKeyboardFunc(Key);     glutDisplayFunc(Draw);     glutMainLoop(); }