创建太阳系模型

描述的程序绘制一个简单的太阳系,其中有一颗行星和一颗太阳,用同一个函数绘制。需要使用glRotate*()函数让这颗行星绕太阳旋转,并且绕自身的轴旋转。还需要使用glTranslate*()函数让这颗行星离开原点,移动到它自己的轨道上。可以在glutWireSphere()函数中使用适当的参数,在绘制球体时指定球体的大小。

planet.c

#include <GL/glut.h>

static int year =,day =;

void init(void)
{
glClearColor(0.0,0.0,0.0,0.0);
glShadeModel(GL_FLAT);
} void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0,1.0,1.0);
glPushMatrix();
glutSolidSphere(1.0,,);
glRotatef((GLfloat)year,0.0,1.0,0.0);
glTranslatef(2.0,0.0,0.0);
glRotatef((GLfloat)day,0.0,1.0,0.0);
glutSolidSphere(0.2,,);
glPopMatrix();
glutSwapBuffers();
} void reshape(int w, int h)
{
glViewport(,,(GLsizei)w,(GLsizei)h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0,(GLfloat)w/(GLfloat)h,1.0,20.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0.0,0.0,5.0,0.0,0.0,0.0,0.0,1.0,0.0);
} void keyboard(unsigned char key, int x, int y)
{
switch (key){
case 'd':
day =(day + )%;
glutPostRedisplay();
break;
case 'D':
day =(day - )%;
glutPostRedisplay();
break;
case 'y':
year =(year + )%;
glutPostRedisplay();
break;
case 'Y':
year =(year - )%;
glutPostRedisplay();
break;
default:
break; } } int main(int argc, char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(,);
glutInitWindowPosition(,);
glutCreateWindow(argv[]);
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutMainLoop();
return ;
}

在终端gcc生成可执行程序

gcc planet.c -o planet -lGL -lGLU -lglut

执行程序

./planet 

程序运行效果如下所示

d和D建行星自转

y和Y控制行星围绕太阳进行旋转

最新文章

  1. r-cnn学习(四):train_faster_rcnn_alt_opt.py源码学习
  2. math and date、ajax、画布
  3. 高性能JavaScript笔记二(算法和流程控制、快速响应用户界面、Ajax)
  4. DAY1 linux 50条命令
  5. Convert a given Binary Tree to Doubly Linked List
  6. java内存知识
  7. oracle group by中cube和rollup字句的使用方法及区别
  8. 关闭WIN10的UAC/自动更新/杀毒软件(兼容WIN7/8/8.1)
  9. The Painter&#39;s Partition Problem Part I
  10. oracle系列--基础理论
  11. 【算法系列学习】codeforces C. Mike and gcd problem
  12. VC6安装错误——Error Launching acmboot.exe
  13. 多个vlan之间路由
  14. 控制页面打印的2种方法(css3的media媒体查询和window.print())
  15. js中的变量提升与函数提升
  16. js用replaceAll全部替换的方法
  17. 现代C++之理解模板类型推断(template type deduction)
  18. tomcat版本号隐藏或修改
  19. Yii2手动下载PHPExcel引入
  20. linux系统java的安装

热门文章

  1. Spring中可以复用的工具类&amp;特性记录
  2. CSS3制作美丽的3D表单
  3. JVM内存结构与GC
  4. POJ 3258 River Hopscotch(二分法搜索)
  5. MySQL存储过程的异常处理
  6. 【GIS】ArcGIS Server密码
  7. 【转】使程序在Linux下后台运行 (关掉终端继续让程序运行的方法)
  8. 【RF库XML测试】通过xpath查找元素的说明
  9. Nginx 解析PHP
  10. DDMS调试信息