200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > OpenGL实现太阳 地球 月球的公转与自转

OpenGL实现太阳 地球 月球的公转与自转

时间:2022-03-08 20:43:53

相关推荐

OpenGL实现太阳 地球 月球的公转与自转

//光照模型必须保留reshape 和开启深度#include "stdafx.h"#include <GL/glut.h>#include "math.h"GLint b;//默认初始值为0void display(void){gluLookAt(1,0.5,1,0,0,0,0,1,0);glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glMatrixMode(GL_MODELVIEW);glLoadIdentity();glColor3f(1.0,0.0,0.0);glRotatef(b,0,1,0);//自传函数 旋转10度glutSolidSphere(3.0,40,40);//半径为3 10 条经线 10 条纬线 原来是线框的经纬线 将WIRER 改为 sOLID时候 球不圆glTranslatef(6, 0, 0);//相对于原点中心地平移glRotatef(b,0,1,0);glColor3f(0.0,0.0,1.0);glutSolidSphere(1.0,20,20);//月亮转glTranslatef(2.0, 0, 0);//不是相对于原点平移 是在上一个基础上再次平移 所以只需要2.0即可glRotatef(b,0,1,0);glColor3f(1.0,1.0,0.0);glutSolidSphere(0.5,10,10);glutSwapBuffers();}void time(int value){b+=2;//为防止b的数据溢出 对b进行一个判断if(b>=360)b=b-360;glutPostRedisplay();//表示再次调用display//回调time函数glutTimerFunc(30,time,1);}void reshape(int w,int h){glViewport(0,0,(GLsizei)w,(GLsizei)h);glMatrixMode(GL_PROJECTION);glLoadIdentity();if(w<h)glOrtho(-10, 10, -10,10 * (GLfloat)h / (GLfloat)w, -10, 10 );elseglOrtho(-10 * (GLfloat)w / (GLfloat)h, 10, -10 ,10, -10,10 );glMatrixMode(GL_MODELVIEW);glLoadIdentity();}void init (){glClearColor(1.0,1.0,1.0,0.0);//设置白色背景glColor3f(1.0,1.0,0.0);////漫反射 位置参数赋值GLfloat light0_diffuse[]= { 1.0, 1.0, 1, 1.0};//打开灯光时如需保留图形颜色,使用颜色材质:glEnable(GL_COLOR_MATERIAL);GLfloat light0_position[] = { 1.0, 1.0, 1.0, 0.0 };//调用漫反射 位置glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_diffuse);glLightfv(GL_LIGHT0, GL_POSITION,light0_position);glShadeModel(GL_SMOOTH);//光滑着色,过渡色效果glEnable(GL_LIGHTING);//启动光照,总开关glEnable(GL_LIGHT0);//打开0号光源glEnable(GL_DEPTH_TEST);//打开深度缓冲区,3D时候用glEnable(GL_COLOR_MATERIAL);}int main(int argc, char* argv[]){glutInit(&argc,argv);glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA);//SINGLE对应glfush()改为double对应glutSwapBuffers();glutInitWindowPosition(200,200);glutInitWindowSize(500,500);glutCreateWindow("001");init();glutTimerFunc(30,time,1);//每隔30ms调用time函数glutDisplayFunc(display);glutReshapeFunc(reshape);glutMainLoop();return 0;}

运行结果

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。