详细配置过程请点击链接
https://www.cnblogs.com/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); // 平移70
glutSolidSphere(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); //平移28
glutSolidSphere(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;
//}
//
效果图