opengl 花哨小例子
2009-04-01 21:02

#include <glut.h>
#include <glaux.h>
#include <stdio.h>

typedef struct
{
int r,g,b;
GLfloat dist, angle;
} stars;

GLuint texture[1];
GLuint loop;
const int num = 50;
stars star[num];

GLuint spini;
GLfloat title = 90.0f;
GLfloat zoom = -15.0f;

bool twinkle; // be twink
bool tp;   // "t" key Pressed

//load bmp file
AUX_RGBImageRec *LoadBMP(char* fileName)
{
FILE *file = NULL;

if (!fileName)
{
   return NULL;
}

file = fopen(fileName, "r");
if (!file)
{
   return NULL;
}

fclose(file);
return auxDIBImageLoad(fileName);
}

//set textures
int LoadGLTextures()
{
int Status = FALSE;

AUX_RGBImageRec* TextureImage[1];
memset(TextureImage, 0, sizeof(void *)*1);

if (TextureImage[0] = LoadBMP("Star.bmp"))
{
   Status = TRUE;

glGenTextures(1, &texture[0]);
   glBindTexture(GL_TEXTURE_2D, texture[0]);
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
   glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX,
    TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE,
    TextureImage[0]->data );

if (TextureImage[0])
   {
    if (TextureImage[0]->data)
    {
     free(TextureImage[0]->data);
    }
    free(TextureImage[0]);
   }
}

return Status;
}

int init()
{

if (!LoadGLTextures())
{
   return FALSE;
}

glClearColor(0.0,0.0,0.0,0.5);
glClearDepth(1.0f);
glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);
glBlendFunc(GL_SRC_ALPHA, GL_ONE);

glEnable(GL_SMOOTH);
glEnable(GL_BLEND);
glEnable(GL_TEXTURE_2D);

for (loop=0; loop<num; loop++)
{
   star[loop].angle = 0.0f;
   star[loop].dist = (float(loop)/num)*5.0f;
   star[loop].r = rand()%256;
   star[loop].g = rand()%256;
   star[loop].r = rand()%256;
}
return TRUE;
}

void reshape(int w, int h)
{
if (h == 0)
{
   h = 1;
}

glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();

gluPerspective(45.0f,(GLfloat)w/(GLfloat)h, 0.1f, 100.0f);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}

void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBindTexture(GL_TEXTURE_2D, texture[0]);

for (loop=0; loop<num; loop++)
{
   glLoadIdentity();
   glTranslatef(0.0f, 0.0f, zoom);
   glRotatef(title, 1.0, 0.0f, 0.0f);
  
   glRotatef(star[loop].angle, 0.0f, 1.0f, 0.0f);
   glTranslatef(star[loop].dist, 0.0f, 0.0f);
   glRotatef(-star[loop].angle, 0.0f, 1.0f, 0.0f);
   glRotatef(-title, 1.0f, 0.0f, 0.0f);

if (!twinkle)
   {
    glColor4ub(star[num-loop-1].r, star[num-loop-1].g,
     star[num-loop-1].b, 255);
    glBegin(GL_QUADS);
     glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 0.0f);
     glTexCoord2f(1.0f, 0.0f); glVertex3f(1.0f, -1.0f, 0.0f);
     glTexCoord2f(1.0f, 1.0f); glVertex3f(1.0f, 1.0f, 0.0f);
     glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 0.0);
    glEnd();
   }

glRotatef(spini, 0.0f, 0.0f, 1.0f);
   glColor4ub(star[loop].r, star[loop].g, star[loop].b, 255);
   glBegin(GL_QUADS);
    glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 0.0f);
    glTexCoord2f(1.0f, 0.0f); glVertex3f(1.0f, -1.0f, 0.0f);
    glTexCoord2f(1.0f, 1.0f); glVertex3f(1.0f, 1.0f, 0.0f);
    glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 0.0);
   glEnd();

spini += 0.01f;
   star[loop].angle += float(loop)/num;
   star[loop].dist -= 0.01f;
   if (star[loop].dist <0.0f)
   {
    star[loop].dist += 5.0f;
    star[loop].r = rand()%256;
    star[loop].g = rand()%256;
    star[loop].b = rand()%256;
   }
}
glutSwapBuffers();

}

void keyboard(unsigned char key, int x, int y)
{
switch(key)
{
case 't':
case 'T':
   {
    twinkle != twinkle;
    break;
   }
}
}

int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowPosition(10,10);
glutInitWindowSize(1000,1000);
glutCreateWindow("star");

init();

glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutIdleFunc(display);
glutMainLoop();

return 0;
}

opengl 花哨小例子相关推荐

  1. c语言连接数据库例子,c语言操作mysql数据库小例子_互帮互助(C language MySQL database operation example _ mutual help).doc...

    这是精心收集的精品经典资料,值得下载保存阅读! c语言操作mysql数据库小例子_互帮互助(C language MySQL database operation example _ mutual h ...

  2. php函数的默认值,php函数指定默认值方法的小例子

    php函数指定默认值方法的小例子 本节内容: php函数指定默认值 在php编程中,为自定义函数设定默认值,当用户调用该函数时,如果不给参数指定值,参数会用默认值顶替. 例1, 复制代码 代码如下: ...

  3. 深度学习与计算机视觉系列(9)_串一串神经网络之动手实现小例子

    深度学习与计算机视觉系列(9)_串一串神经网络之动手实现小例子 作者:寒小阳  时间:2016年1月.  出处:http://blog.csdn.net/han_xiaoyang/article/de ...

  4. spring mvc文件上传小例子

    spring mvc文件上传小例子 1.jsp页面 <%@page contentType="text/html;charset=UTF-8"%> <%@page ...

  5. Java基础。public,private,static变量!以及一个实例化的小例子 以及方法

    public,适用范围最广! private,仅仅方法内部可以使用!创建出来的对象也是不可以使用的! 代码: public class mmm12333 {public int a = 1111;pr ...

  6. JAVA数据库应用的一个小例子

    自己随便写的,以炉石为背景,写一个参考用的小例子,先上SQL表: if OBJECT_ID('card_pool') is not null drop table card_pool; create ...

  7. Hadoop中RPC协议小例子报错java.lang.reflect.UndeclaredThrowableException解决方法

    最近在学习传智播客吴超老师的Hadoop视频,里面他在讲解RPC通信原理的过程中给了一个RPC的小例子,但是自己编写的过程中遇到一个小错误,整理如下: log4j:WARN No appenders ...

  8. QT小例子GUI(主)线程与子线程之间的通信

    QT小例子GUI(主)线程与子线程之间的通信 在主线程上,可以控制子线程启动,停止,清零 如果子线程启动的话,每一秒钟会向主线程发送一个数字,让主线程更新界面上的数字. #ifndef TQT_H_ ...

  9. sku属性组合小例子

    参考: http://www.cnblogs.com/hsp-blog/p/6215721.html http://blog.csdn.net/csdn924618338/article/detail ...

最新文章

  1. hadoop伪分布式安装
  2. 第十六届全国大学生广东赛区线上比赛流程规范
  3. python去重txt文本_Python 文件去重(转载)
  4. 东北能源大数据中心正式成立,一期将建设2.4万平方米数据中心
  5. Sklearn 损失函数如何应用到_15 分钟带你入门 sklearn 与机器学习(分类算法篇)...
  6. Android复习14【高级编程:推荐网址、抠图片上的某一角下来、Bitmap引起的OOM问题、三个绘图工具类详解、画线条、Canvas API详解(平移、旋转、缩放、倾斜)、矩阵详解】
  7. 【微机原理与接口技术】具体芯片(1)并行接口8255A(1):全局观
  8. 机器学习算法中的准确率、精确率、召回率和F值
  9. C++ 使用 TinyXml 解析 XML 文件
  10. 我们的开源项目-2013年度开源社区线下聚会《JEECG微云快速开发平台-SAAS企业应用在线开发与微信移动应用》PPT分享
  11. Hadoop 2.x MapReduce(MR V1)字数统计示例
  12. 山东中职计算机应用基础课件,计算机应用基础课件(中职)-精选版.ppt
  13. mysql 插入语句语法_SQL 插入数据(INSERT INTO 语句)
  14. 那本失去的《牛津高阶英汉双解词典》第6版 P2666-2665
  15. 渗透测试工程师面试题
  16. java 使用POI导入复杂excel表格
  17. python中 for in 用法_python中for in的用法详解
  18. @程序员,你哄女朋友要是有写代码那么 6,你早就脱单了
  19. esxi怎么传输文件到虚拟机_软路由篇2:3865U软路由折腾记——Esxi软虚拟机+OpenWrt教程
  20. 深挖用户需求,教你4招搞定精准营销

热门文章

  1. 渗透测试工具:Burpsuite简略介绍4---Intruder
  2. 裂开!考研中伤害不大,但侮辱性极强的10句话!
  3. selenium库实现批量爬取网页文章得到PDF
  4. 北邮计算机类本科人数,北邮!2021全国招收本科生3600多人,北京占10%左右,你怎么看?...
  5. ubuntu 下播放 yuv 格式的文件预览Raw格式图片
  6. 开课吧T31项目第2天
  7. python中def的用法详解_Python3中def的用法
  8. 搭建Vue后台管理项目
  9. 电商系统中的商品的SKU和SPU是什么?
  10. COM类错误80040154