700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > opengl的配置和太阳-地球-月球演示

opengl的配置和太阳-地球-月球演示

时间:2024-02-29 12:26:20

相关推荐

opengl的配置和太阳-地球-月球演示

详细配置过程请点击链接

/flylinmu/p/7823019.html

下面介绍opengl实例,太阳-地球-月球演示

建立一个控制台程序

sun.cpp

#include "stdafx.h"#include <gl/glut.h>#include <Windows.h>void light(void){GLfloat position[] = { 0.0f,30.0f,30.0f,1.0f };GLfloat ambient[] = { 0.0f,0.0f,0.0f,1.0f };GLfloat diffuse[] = { 0.0f, 0.8f, 0.8f, 1.0f };GLfloat specular[] = { 0.0f, 0.6f, 0.6f, 1.0f };glLightfv(GL_POSITION, GL_POSITION, position);glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);glLightfv(GL_LIGHT0, GL_SPECULAR, specular);glEnable(GL_LIGHT0);glEnable(GL_LIGHTING);}void Initial(){glEnable(GL_DEPTH_TEST); // 启用深度测试glClearColor(0.0f, 0.0f, 0.0f, 1.0f );//背景为黑色}void TimerFunc(int value){glutPostRedisplay();glutTimerFunc(100, TimerFunc, 1);}void ChangeSize(int w, int h){if(h == 0)h = 1;glViewport(0, 0, w, h);// 设置视区尺寸glMatrixMode(GL_PROJECTION); // 指定当前操作投影矩阵堆栈glLoadIdentity(); // 重置投影矩阵GLfloat fAspect;fAspect = (float)w/(float)h; // 计算视区的宽高比gluPerspective(45.0, fAspect, 1.0, 500.0); // 指定透视投影的观察空间glMatrixMode(GL_MODELVIEW); glLoadIdentity();}void Display(void){{GLfloat wall_mat_ambient[] = { 0.105882, 0.058824, 0.113725, 1.000000 };GLfloat wall_mat_diffuse[] = { 0.427451, 0.470588, 0.541176, 1.000000 };GLfloat wall_mat_specular[] = { 0.933333, 0.733333, 0.521569, 1.000000 };GLfloat wall_mat_emission[] = { 0.0f, 0.0f, 0.0f, 1.0f };GLfloat wall_mat_shininess = 9.846150;glMaterialfv(GL_FRONT, GL_AMBIENT, wall_mat_ambient);glMaterialfv(GL_FRONT, GL_DIFFUSE, wall_mat_diffuse);glMaterialfv(GL_FRONT, GL_SPECULAR, wall_mat_specular);//glMaterialfv(GL_FRONT, GL_EMISSION, wall_mat_emission);glMaterialf(GL_FRONT, GL_SHININESS, wall_mat_shininess);}static GLfloat angle=0.0f;//光照角度static float fElect1 = 0.0f; static float fElect2 = 0.0f; // 绕星球旋转的角度glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //清除颜色和深度缓冲区{// 绘制太阳glMatrixMode(GL_MODELVIEW); // 指定当前操作模型视图矩阵堆栈glLoadIdentity(); // 重置模型视图矩阵//glPushMatrix();glColor3f(1.0f, 0.0f, 0.0f);glTranslatef(0.0f, 0.0f, -250.0f); //将图形沿z轴负向移动glutSolidSphere(20.0f, 15, 15);}{//绘制地球轨道,半径70// glPushMatrix();glColor3f(1.0, 1.0, 0.0);glTranslatef(0.0, 0.0, 0.0);glutSolidTorus(0.5, 70.0, 15, 50); }{// 画出地球//glPushMatrix();glColor3f(0.0f, 0.0f, 1.0f);glRotatef(fElect1, 0.0f, 0.0f, 1.0f); // 俯视角度轨道固定glTranslatef(70.0f, 0.0f, 0.0f);// 平移70glutSolidSphere(6.0f, 15, 15); };{//绘制月球轨道,半径28//glPushMatrix(); // 保存当前的模型视图矩阵glColor3f(1.0, 1.0, 0.0);glRotatef(fElect2, 1.0f, 0.0f, 0.0f); // 地球自转glTranslatef(0.0, 0.0, 0.0);glutSolidTorus(0.5, 28.0, 15, 50); }{ // 画出月球//glPushMatrix();glColor3f(1.0f, 1.0f, 1.0f);//glPushMatrix();glRotatef(fElect2, 0.0f, 0.0f, 1.0f); glTranslatef(28.0f, 0.0f, 0.0f); //平移28glutSolidSphere(2.0f, 15, 15);}fElect2 += 10.0f;// 增加旋转步长,产生动画效果fElect1 += 2.0f;// 增加旋转步长,产生动画效果angle+=2.0f;if(angle>360.0f)angle=2.0f;if(fElect2>360.0f)fElect2=10.0f;if(fElect1>360.0f)fElect1=2.0f;glutSwapBuffers();}int main(int argc, char* argv[]){glutInit(&argc, argv);glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);glutCreateWindow("太阳-地球-月球动画演示");glutReshapeFunc(ChangeSize);light();glutDisplayFunc(Display);//运行程序glutTimerFunc(500, TimerFunc, 1);//指定定时器回调函数Initial();glutMainLoop();return 0;}#include "stdafx.h"

ConsoleApplication1.cpp

// ConsoleApplication1.cpp: 定义控制台应用程序的入口点。//#include "stdafx.h"//////int main()//{// return 0;//}//

效果图

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