#include <stdio.h>
#include<stdlib.h>
#include <GL/glut.h>GLuint texture_id1;  //纹理id
int angle = 0;
GLUquadricObj* q = gluNewQuadric();int load_texture(char* file_name, int width, int height, int depth, GLenum colour_type, GLenum filter_type)
{GLubyte* raw_bitmap;FILE* file;int errnum;if ((errnum = fopen_s(&file,file_name, "rb")) != 0){return 1;}raw_bitmap = (GLubyte*)malloc(width * height * depth * (sizeof(GLubyte)));if (raw_bitmap == NULL){fclose(file);return 2;}fread(raw_bitmap, width * height * depth, 1, file);fclose(file);//  设置过滤类型glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter_type);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filter_type);//  设置纹理环境glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);gluBuild2DMipmaps(GL_TEXTURE_2D, 3, width, height, colour_type,GL_UNSIGNED_BYTE, raw_bitmap);free(raw_bitmap);return 0;
}void LoadTextures(GLuint texture_id, int MaxNrOfTextures)
{char name[] = "ear.bmp";glPixelStorei(GL_UNPACK_ALIGNMENT, 1);glGenTextures(MaxNrOfTextures, &texture_id);glBindTexture(GL_TEXTURE_2D, 1);if (load_texture(name, 512, 257, 3, GL_BGR_EXT, GL_NEAREST)){exit(1);}
}void init(void)
{glClearColor(0.0, 0.0, 0.0, 0.0);glShadeModel(GL_FLAT);LoadTextures(texture_id1, 1);glEnable(GL_TEXTURE_2D);glClearDepth(1.0f);    // 设置深度缓存glDepthFunc(GL_LEQUAL);  // 选择深度测试方式glEnable(GL_DEPTH_TEST);  // 开启深度测试glShadeModel(GL_SMOOTH);  // 阴暗处理采用平滑方式glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // 最精细的透视计算glBindTexture(GL_TEXTURE_2D, 1);gluQuadricDrawStyle(q, GLU_FILL);gluQuadricNormals(q, GLU_SMOOTH);gluQuadricTexture(q, GL_TRUE);return;
}
void display(void)
{glPushMatrix();angle = (angle + 1)%360;// 清除颜色和深度缓存glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glRotatef(angle, 0.0, 0.0, 1.0);gluSphere(q, 1.0, 50, 40);glPopMatrix();glutSwapBuffers();
}void reshape(int w, int h)
{glViewport(0, 0, (GLsizei)w, (GLsizei)h);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(45.0, (GLfloat)w / (GLfloat)h, 0.1, 20.0);glMatrixMode(GL_MODELVIEW);glLoadIdentity();gluLookAt(0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0);}
int main(int argc, char** argv)
{glutInit(&argc, argv);glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);glutInitWindowSize(1000, 600);glutInitWindowPosition(100, 100);glutCreateWindow(argv[0]);init();glutDisplayFunc(display);glutIdleFunc(display);glutReshapeFunc(reshape);glutMainLoop();return 0;
}

OpenGL地球(自转+贴图)相关推荐

  1. openGL绘制带纹理太阳、地球、月亮,并且地球自转并且围绕太阳旋转。月亮自转也会围绕地球旋转

    openGL系列文章目录 前言 使用openGL绘制太阳.地球.月亮,太阳自转,地球自转并且围绕太阳旋转.月亮自转也会围绕地球旋转,其实月亮也会围绕太阳旋转的. 一.效果 还是有不满意的地方: 1.没 ...

  2. opengl实现太阳系、地球系,并加上地球的贴图

    实验要求:实现太阳系,地球系,即实现地球绕着太阳转,月球绕着地球转,并且给球体加上地球的贴图. 效果如下: 附一张地球的贴图(哎呀,我怎么这么贤惠) 这其中需要用到glaux系列的包,emmmmmmm ...

  3. 天球坐标系、地球坐标系与地球自转有无关系,哪一种便于描述地面观测站的空间位置,哪一种便于描述人造地球卫星的位置?请用类似思维导图的方式总结GNSS定位的时空基准?GPS卫星定位中时间系统有何重要意义?

    答: 1.天球坐标系.地球坐标系与地球自转有无关系,哪一种便于描述地面观测站的空间位置,哪一种便于描述人造地球卫星的位置? 卫星定位中常采用空间直角坐标系及其相应的大地坐标系,一般取地球质心为坐标系的 ...

  4. html制作地球自转,利用CSS3实现地球自转

    这篇文章主要介绍了关于利用CSS3实现地球自转,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 CSS3实现地球自转,不可思议啊,不过确实可以实现,不信的朋友可以祥看本文,附送源码 最终 ...

  5. 天球坐标系、地球坐标系与地球自转有无关系?哪一种便于描述地面观测站的空间位置?哪一种便于描述人造地球卫星的位置?总结GNSS定位的时空基准? GPS卫星定位中,时间系统有何重要意义?

    1. 天球坐标系.地球坐标系与地球自转有无关系?哪一种便于描述地面观测站的空间位置?哪一种便于描述人造地球卫星的位置? 天球坐标系与地球自转无关,地球坐标系与地球自转有关.地球坐标系便于描述地面观测站 ...

  6. html 地球页面代码,纯CSS3实现地球自转实现代码(图文教程附送源码)

    最终成果: 素材:两张图片, espaco.jpg(1600*1000) terra.jpg(900*450) 第一步,形成静态图(地球背景全屏,地球大小为450px*450px,地球位置为上下左右居 ...

  7. html怎么实现地球自转,纯CSS3实现地球自转的教程

    相信很多人在听到CSS3实现地球自转的时候都会很惊讶,不过css确实可以实现地球自转,那么你知道纯CSS3如何实现地球自转吗?好奇的小伙伴们一起跟爱站小编去看看纯CSS3实现地球自转的教程吧. 最终成 ...

  8. 可交互的地球html,[网页设计]纯CSS3实现地球自转

    最终成果: 素材:两张图片, espaco.jpg(1600*1000) terra.jpg(900*450) 第一步,形成静态图(地球背景全屏,地球大小为450px*450px,地球位置为上下左右居 ...

  9. 地球自转减速影响世界时 格林尼治时间或成历史

    格林尼治时间以英国首都伦敦市郊格林尼治天文台命名,作为全球通用的时间参考标准已使用120多年.如今,这一以地球自转为依据的"世界时"可能由以原子振荡周期为依据的"原子时& ...

  10. OpenGL cubemap 立方体贴图实例

    OpenGL cubemap 立方体贴图 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #include <glad/glad.h> #include ...

最新文章

  1. bash 运行程序 下一步_怎样用 Bash 编程:语法和工具
  2. jsf项目启动报:java.lang.ClassNotFoundException: javax.faces.webapp.FacesServlet
  3. Algorithm:C+语言实现之数组相关算法(和为定值的两个数、和为定值的m个数、荷兰国旗、长度为2n的洗牌算法、任意长度数组的洗牌算法)
  4. bzoj5324:[Jxoi2018]守卫
  5. OSTaskStkInit_FPE_x86()--浮点仿真任务栈初始化函数(分段寻址的地址转换为线性地址)
  6. bootstrap与jQuery结合的动态进度条
  7. redisson版本_通用Redisson版本
  8. OBIEE-----ClusterControler通信的问题
  9. 进程间通信的11种方法
  10. 了解有关计算机病毒的知识,从基础知识开始 全面认识计算机病毒
  11. Linux安装显卡驱动后闪屏问题
  12. 【CAN】CAN的比特率和波特率
  13. 金士顿服务器内存条怎么看型号,【查看内存条参数】 内存条上的参数怎么看...
  14. 《东周列国志》第八十六回 吴起杀妻求将 驺忌鼓琴取相
  15. 使用VS Code远程连接服务器,在VS Code上编辑服务器文件。超级简单
  16. 厦门大学计算机调剂要求,厦门大学考研调剂复试有什么要求
  17. InstallShield自定义对话框浅谈(转)
  18. 「诗经」主题文化数字藏品中奖名单公布
  19. 个人任务五-事后诸葛亮(项目回顾)
  20. 【java】三角形(Object 类与异常处理)

热门文章

  1. 异贝服装店都可以做会员营销?神奇的逆向思维让他快速裂变赚钱!
  2. 猜拳小游戏编程(python)
  3. JAVA8实战 -- Lamdba表达式
  4. Octane 2022 预览版来了 -设计师们的福音
  5. iOS开发 黑暗模式
  6. ajax谷歌浏览器提示等待超时,调用谷歌浏览器爬虫,selenium webdriver等设置等待时间和超时时间...
  7. 2009-09-23 18:04 by 不仅仅是通用权限设计, 3508 visits, 网摘, 收藏, 编辑
  8. 人生不该困于五环之外(3):3到5年离开五环之外
  9. win7 计算机不显示收藏夹,在WIN7中隐藏“库”和“收藏夹”
  10. android textview表情,android如何在textview或edittext上添加表情