时间:2014-12-01 来源:

NeHeOpenGLLesson9 【编程语言】

// $: 

clang -o lesson lesson9.c -Wno-deprecated -framework OpenGL -framework GLUT

// // This code was created by Jeff Molofee '99 (ported to Linux/GLUT by // Richard Campbell '99) // // If you've found this code useful, g, 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, not just Intel's little endian) */ static unsigned int getint(fp) FILE *fp; { int c, c2, 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, "rb"))==NULL) { printf("File Not Found : %s\n", up to the width/height: fseek(file, SEEK_CUR); // No 100% errorchecking anymore!!! // read the width image->sizeX = getint (file); printf("Width of %s: %lu\n", image->sizeX); // read the height image->sizeY = getint (file); printf("Height of %s: %lu\n", 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", planes); return 0; } // read the bpp bpp = getshort(file); if (bpp != 24) { printf("Bpp from %s is not 24: %u\n", bpp); return 0; } // seek past the rest of the bitmap header. fseek(file, SEEK_CUR); // read the data. image->data = (char *) malloc(size); if (image->data == NULL) { printf("Error allocating memory for color-corrected image data"); return 0; } if ((i = fread(image->data, 1, filename); return 0; } for (i=0;i<size;i+=3) { // reverse all of the colors. (bgr -> rgb) temp = image->data[i]; image->data[i] = image->data[i+2]; image->data[i+2] = temp; } // we're done. return 1; } // Load Bitmaps And Convert To Textures GLvoid LoadGLTextures(GLvoid) { // Load Texture Image *image1; // allocate space for texture image1 = (Image *) malloc(sizeof(Image)); if (image1 == NULL) { printf("Error allocating space for image"); exit(0); } if (!ImageLoad("Data/lesson9/Star.bmp", &texture[0]); // linear filtered texture glBindTexture(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_TEXTURE_MIN_FILTER, 0, image1->sizeX, 0, GL_UNSIGNED_BYTE, GLsizei Height) // We call this right after our OpenGL window is created. { LoadGLTextures(); // load the textures. glEnable(GL_TEXTURE_2D); // Enable texture mapping. glClearColor(0.0f, 0.0f,(GLfloat)Width/(GLfloat)Height,100.0f); // Calculate The Aspect Ratio Of The Window glMatrixMode(GL_MODELVIEW); /* setup blending */ glBlendFunc(GL_SRC_ALPHA, because we're fullscreen) */ GLvoid ReSizeGLScene(GLsizei Width, 0, Height); // Reset The Current Viewport And Perspective Transformation glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0f,0.1f, texture[0]); // pick the texture. for (loop=0; loop<STAR_NUM; loop++) { // loop through all the stars. glLoadIdentity(); // reset the view before we draw each star. glTranslatef(0.0f, zoom); // zoom into the screen. glRotatef(tilt, 0.0f, 0.0f, 0.0f); // rotate to the current star's angle. glTranslatef(star[loop].dist, 0.0f); // move forward on the X plane (the star's x plane). glRotatef(-star[loop].angle, 1.0f, 1.0f, 0.0f); // cancel the screen tilt. if (twinkle) { // twinkling stars enabled ... draw an additional star. // assign a color using bytes glColor4ub(star[STAR_NUM - loop].r, star[STAR_NUM - loop].b, 0.0f); glVertex3f(-1.0f, 0.0f); glTexCoord2f(1.0f, -1.0f, 1.0f); glVertex3f( 1.0f, 0.0f); glTexCoord2f(0.0f, 1.0f, 0.0f, 1.0f); // rotate the star on the z axis. // Assign A Color Using Bytes glColor4ub(star[loop].r,star[loop].b, 0.0f); glVertex3f(-1.0f, 0.0f); glTexCoord2f(1.0f,-1.0f, 1.0f); glVertex3f( 1.0f, 0.0f); glTexCoord2f(0.0f, 1.0f, swap the buffers to display what just got drawn. glutSwapBuffers(); } /* The function called whenever a normal key is pressed. */ void keyPressed(unsigned char key, int y) { /* avoid thrashing this procedure */ usleep(100); switch (key) { case ESCAPE: // kill everything. /* exit the program...normal termination. */ exit(1); break; // redundant. case 84: case 116: // switch the twinkling. printf("T/t pressed; twinkle is: %d\n", between 0 and 1. printf("Twinkle is now: %d\n", key); break; } } /* The function called whenever a normal key is pressed. */ void specialKeyPressed(int key, int y) { /* avoid thrashing this procedure */ usleep(100); switch (key) { case GLUT_KEY_PAGE_UP: // zoom out zoom -= 0.2f; break; case GLUT_KEY_PAGE_DOWN: // zoom in zoom += 0.2f; break; case GLUT_KEY_UP: // tilt up tilt -= 0.5f; break; case GLUT_KEY_DOWN: // tilt down tilt += 0.5f; break; default: printf ("Special key %d pressed. No action there yet.\n", char **argv) { /* Initialize GLUT state - glut will take any command line arguments that pertain to it or X Windows - look at its documentation at http://reality.sgi.com/mjk/spec3/spec3.html */ glutInit(&argc, 480); /* the window starts at the upper left corner of the screen */ glutInitWindowPosition(0, redraw our gl scene. */ glutIdleFunc(&DrawGLScene); /* Register the function called when our window is resized. */ glutReshapeFunc(&ReSizeGLScene); /* Register the function called when the keyboard is pressed. */ glutKeyboardFunc(&keyPressed); /* Register the function called when special keys (arrows, etc) are pressed. */ glutSpecialFunc(&specialKeyPressed); /* Initialize our window. */ InitGL(640, 480); /* Start Event Processing Engine */ glutMainLoop(); return 1; }

点击次数:13306
作者:
web前端行业资讯
Web new NewsList
英特尔宣布与法拉利跨界合作欲将AI技术用于赛车运动 ,,2018年01月11日甲骨文服务器出漏洞:攻击者用漏洞挖矿获取加密货币 ,,2018年01月11日用深度学习设计图像视频压缩算法:更简洁、更强大 ,,2018年01月11日Ubuntu内核和NVIDIA更新:修复Meltdown和Spectre两处漏洞 ,,2018年01月11日AntDesign3.1.1发布,阿里企业级UI设计语言 ,,2018年01月11日微信「跳一跳」带火小游戏,开发者如何快速上手? ,,2018年01月11日谷歌公布最新安卓系统份额:你用上奥利奥了么? ,,2018年01月11日腾讯开发出“3D音效”算法:普通耳机实现3D实时语音效果 ,,2018年01月11日谷歌工程师点赞中国程序员实现Node.js启动超4倍提速 ,,2018年01月11日三星电子总裁兼CE部门负责人金炫奭:万物互联时代到来 ,,2018年01月11日NVIDIA和大众合作建立智能驾驶助手 ,,2018年01月11日GIMPS项目报告发现已知最大素数 ,,2018年01月11日微软与生物技术公司开展AI驱动的血液检测同时诊断数十种疾病 ,,2018年01月11日微软跨平台移动开发工具套件HockeyApp宣布免费 ,,2018年01月11日《硅谷》里神乎其神的压缩技术,AI正在一点点做出来 ,,2018年01月11日LinuxMint19代号敲定为“Tara”预计2018年5月至6月期间发布 ,,2018年01月11日Facebook发布wav2letter工具包,用于端到端自动语音识别 ,,2018年01月11日开源数据库ArangoDB正进行约1156万美元股权融资 ,,2018年01月11日IntelCPU漏洞闹大:腾讯云紧急升级 ,,2018年01月11日2018年1月全球数据库排名:Redis夺回第八 ,,2018年01月11日Lyft将联手无人驾驶公司于CES上展示无人驾驶汽车 ,,2018年01月11日京东X无人超市首家社会门店开业:刷脸进、微信自动结算 ,,2018年01月11日担心被AI取代是杞人忧天?高晓松跨年演讲说的有几分对 ,,2018年01月11日免费授权技术许可Intel宣布在未来CPU中集成雷电3 ,,2018年01月11日算法决定你在社交媒体上看到的信息 ,,2018年01月11日谷歌安全博客披露“英特尔内核漏洞”更多细节 ,,2018年01月04日Postgres10开发者新特性 ,,2017年12月28日阿里巴巴、狗尾草、苏大联合论文:基于对抗学习的众包标注用于中文命名实体识别 ,,2017年12月28日柯洁的2017:20岁,与AI斗与人类斗,其乐无穷 ,,2017年12月28日如果机器人拥有痛觉,这个世界会有哪些不一样? ,,2017年12月28日jQuery1.8Release版本发布了2014年01月29日Python中可避免读写乱码的一个强大方法【编程语言】2015年07月07日《Java虚拟机原理图解》2.3、Class文件中的常量池详解(下) 【编程语言】2014年11月12日php网页后退不再出现过期2014年01月29日苹果Siri备受期待十大特征 ,,2016年06月29日iOS正则表达式 【编程语言】2015年07月20日Linux内核工程导论——Linux的启动2015年08月27日如何用键盘控制鼠标 【移动开发】2014年11月13日ERROR1366(HY000):Incorrectstringvalue:'\xC6\xF4\xD3\xC3'forcolumn'name'atrow1 【编程语言】2015年05月18日GCD2015年04月13日importjavax.servlet.ServletException出错【云计算】2015年03月11日实时(RT)操作系统的起源【编程语言】2015年05月05日关于Bootstrap的理解 【Web前端】2015年07月16日七款Debug工具推荐:iOS开发必备的调试利器【系统运维】2015年08月26日ANT压缩(去掉空格注释)JS文件可提高js运行速度2014年01月29日各种数据库领域的中国名人--chinatopgun 【编程语言】2014年11月24日关于前端的一点思考 【编程语言】2015年03月30日ERROR2003(HY000):Can'tconnecttoMySQLserveron'10.16.115.101'(111) 【Web前端】2014年12月19日Android仿iphone自定义滚动选择器 【编程语言】2015年05月25日使用LeopardRedis操作Redis 【编程语言】2015年02月13日hdu1710BinaryTreeTraversals前序遍历和中序推后序 【Web前端】2015年07月09日JavaScript之DOM 【编程语言】2015年04月01日TNS-03505名称无法解析【编程语言】2015年06月17日手把手教hadoop2.5.1+eclipse开发调试环境搭建(1) 【综合】2014年12月03日javaFile的相对路径 【编程语言】2015年08月14日R语言学习笔记 【编程语言】2015年05月07日AI教程Illustrator制作IT科技背景图2014年01月28日使用IntelliJIDEA开发erlang项目【数据库】2015年03月17日电商项目需求分析---七月实习总结 【编程语言】2015年08月03日问答搜索【综合】2015年06月02日
我们保证
We guarantee
> psd效果文件手工切图,保证图片效果最好体积最小利于传输
> 100%手写的HTML(DIV+CSS)编码,绝对符合W3C标准
> 代码精简、css沉余量小、搜索引擎扫描迅速,网页打开快捷
> 应用Css Sprite能够减少HTTP请求数,提高网页性能
> 跨浏览器兼容(IE6、7、8、9,Firefox火狐,Chrome谷歌)