详细配置过程请点击链接

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;
//}
//

效果图

 

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

 

相关文章: