效果图
#include<Windows.h>
#include<gl/glut.h>
void myinit()
{
/* 设置材质的各种光的颜色成分反射比率*/
GLfloat mat_ambient[] = { 0.8,0.8,0.8,1.0 };
GLfloat mat_diffuse[] = { 0.8,0.0,0.8,1.0 }; /* 紫色 */
GLfloat mat_specular[] = { 1.0, 0.0, 1.0, 1.0 }; /* 亮紫色 */
GLfloat mat_shininess[] = { 50.0 };
//没有设置光的颜色,则默认为白光
GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 };
GLfloat ambient[] = { 0.3,0.3f,0.3,1.0 };
GLfloat diffuse[] = { 0.7,0.7f,0.7,1.0 };
GLfloat specular[] = { 0.5,0.5f,0.5,1.0 };
//创建光源
glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);//环境光
glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);//漫反射光
glLightfv(GL_LIGHT0, GL_SPECULAR, specular);//镜面光
//光照方向,法向
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
//启用光照
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glDepthFunc(GL_LESS);
glEnable(GL_DEPTH_TEST);
//设置材质
glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSolidSphere(1.0, 20.0, 20.0);//1:半径 2、3:经线纬线密度
/*glBegin(GL_TRIANGLES);
glVertex2f(0.0, 0.0);
glVertex2f(0.7, 0.7);
glVertex2f(0.7, 0.0);
glEnd();*/
glFlush();
}
void myReshape(GLsizei w, GLsizei h)
{
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if (w <= h)
glOrtho(-1.5, 1.5, -1.5*(GLfloat)h / (GLfloat)w,
1.5*(GLfloat)h / (GLfloat)w, -10.0, 10.0);
else
glOrtho(-1.5*(GLfloat)w / (GLfloat)h,
1.5*(GLfloat)w / (GLfloat)h, -1.5, 1.5, -10.0, 10.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowPosition(100, 100);
glutInitWindowSize(500, 500);
glutCreateWindow("this is my test OpenGL project");
myinit();//光源信息、材质初始化
glutDisplayFunc(display);
glutReshapeFunc(myReshape);// 改变窗口大小时保持图形比例
glutMainLoop();
}