首页 > 代码库 > NeHe OpenGL Lesson 9
NeHe OpenGL Lesson 9
// // This code was created by Jeff Molofee '99 (ported to Linux/GLUT by // Richard Campbell '99) // // If you've found this code useful, please let me know. // // Visit me at www.demonews.com/hosted/nehe // (email Richard Campbell at ulmont@bellsouth.net) // /* Linux #include <GL/glut.h> // Header File For The GLUT Library #include <GL/gl.h> // Header File For The OpenGL32 Library #include <GL/glu.h> // Header File For The GLu32 Library */ // Mac OS X #include <OpenGL/OpenGL.h> #include <GLUT/GLUT.h> #include <unistd.h> // Header file for sleeping. #include <stdio.h> // Header file for standard file i/o. #include <stdlib.h> // Header file for malloc/free. /* number of stars to have */ #define STAR_NUM 50 /* ascii codes for various special keys */ #define ESCAPE 27 #define PAGE_UP 73 #define PAGE_DOWN 81 #define UP_ARROW 72 #define DOWN_ARROW 80 #define LEFT_ARROW 75 #define RIGHT_ARROW 77 /* The number of our GLUT window */ int window; /* twinkle on/off (1 = on, 0 = off) */ int twinkle = 0; typedef struct { // Star structure int r, g, b; // stars' color GLfloat dist; // stars' distance from center GLfloat angle; // stars' current angle } stars; // name is stars stars star[STAR_NUM]; // make 'star' array of STAR_NUM size using info from the structure 'stars' GLfloat zoom = -15.0f; // viewing distance from stars. GLfloat tilt = 90.0f; // tilt the view GLfloat spin; // spin twinkling stars GLuint loop; // general loop variable GLuint texture[1]; // storage for one texture; /* Image type - contains height, width, and data */ struct Image { unsigned long sizeX; unsigned long sizeY; char *data; }; typedef struct Image Image; /* * getint and getshort are help functions to load the bitmap byte by byte on * SPARC platform (actually, just makes the thing work on platforms of either * endianness, not just Intel's little endian) */ static unsigned int getint(fp) FILE *fp; { int c, c1, c2, c3; // get 4 bytes c = getc(fp); c1 = getc(fp); c2 = getc(fp); c3 = getc(fp); return ((unsigned int) c) + (((unsigned int) c1) << 8) + (((unsigned int) c2) << 16) + (((unsigned int) c3) << 24); } static unsigned int getshort(fp) FILE *fp; { int c, c1; //get 2 bytes c = getc(fp); c1 = getc(fp); return ((unsigned int) c) + (((unsigned int) c1) << 8); } // quick and dirty bitmap loader...for 24 bit bitmaps with 1 plane only. // See http://www.dcs.ed.ac.uk/~mxr/gfx/2d/BMP.txt for more info. int ImageLoad(char *filename, Image *image) { FILE *file; unsigned long size; // size of the image in bytes. unsigned long i; // standard counter. unsigned short int planes; // number of planes in image (must be 1) unsigned short int bpp; // number of bits per pixel (must be 24) char temp; // used to convert bgr to rgb color. // make sure the file is there. if ((file = fopen(filename, "rb"))==NULL) { printf("File Not Found : %s\n",filename); return 0; } // seek through the bmp header, up to the width/height: fseek(file, 18, SEEK_CUR); // No 100% errorchecking anymore!!! // read the width image->sizeX = getint (file); printf("Width of %s: %lu\n", filename, image->sizeX); // read the height image->sizeY = getint (file); printf("Height of %s: %lu\n", filename, image->sizeY); // calculate the size (assuming 24 bits or 3 bytes per pixel). size = image->sizeX * image->sizeY * 3; // read the planes planes = getshort(file); if (planes != 1) { printf("Planes from %s is not 1: %u\n", filename, planes); return 0; } // read the bpp bpp = getshort(file); if (bpp != 24) { printf("Bpp from %s is not 24: %u\n", filename, bpp); return 0; } // seek past the rest of the bitmap header. fseek(file, 24, SEEK_CUR); // read the data. image->data = http://www.mamicode.com/(char *) malloc(size);>
// $:
clang -o lesson lesson9.c -Wno-deprecated -framework OpenGL -framework GLUT
NeHe OpenGL Lesson 9
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。