#include <gl/glew.h>
#include <gl/glut.h>
float g_rorate = 0;
float VertexArray[]={
0,0,-1,20,40,0,
0,0,-1,40,8,0,
0,1,0,10,20,0,
};
float VertexArray1[]={
0,-1,0,40,-8,0,
0,0,-1,20,-40,0,
0,-1,0,10,-20,0,
};
// 环境光
float ambientLight[]={0.1,0.1,0.1,1.0};
// 散射光
float difussLight[]={1.0,1.0,1.0,1.0};
// 镜面光
float specularLight[]= {1.0,1.0,1.0,1.0};
float lightPos[]={0,100,100,1.0};
float lightPosDirec[]={0,0,1,0};
float mat_diffuse[]={1.0,0.5,0.5,1.0};
float mat_specular[]={1.0,1.0,1.0,1.0};
float mat1_ambient[]={1.0,0.0,0.0,1.0};
float mat2_ambient[]={1.0,1.0,0.0,1.0};
float shineness[] = {80}; //亮度
float light1_ambient[]= {1.0,0.2,0.2,1.0};
float light1_diffuse[]={0.5,0.1,0.1,1.0};
float light1_specular[]={1.0,1.0,1.0,1.0};
float light1_pos[]={0,0,80,1.0};
float light1_direction[]={0,0,1.0};
float color[4]={1.0,1.0,0.0,0.1};
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glPushMatrix();
glRotatef(g_rorate,0,1,0);
glTranslatef(light1_pos[0],light1_pos[1],light1_pos[2]);
glDisable(GL_LIGHTING);
glColor4f(1.0,0.0,1.0,1.0);
glutSolidCube(2);
glLightfv(GL_LIGHT1,GL_POSITION,light1_pos);
glEnable(GL_LIGHTING);
glPopMatrix();
gluLookAt(0,10,-100,0,0,0,0,1,0);
//glColorMaterial(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE);
glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);
glMaterialfv(GL_FRONT,GL_SHININESS,shineness);
//glMaterialfv(GL_FRONT_AND_BACK,GL_DIFFUSE,mat1_ambient);
glColor3f(1.0,0,0);
glInterleavedArrays(GL_N3F_V3F,0,VertexArray);
glDrawArrays(GL_TRIANGLES,0,3);
glColor3f(0.5,0.5,0.8);
glMaterialfv(GL_FRONT_AND_BACK,GL_DIFFUSE,mat2_ambient);
//glInterleavedArrays(GL_N3F_V3F);
glInterleavedArrays(GL_N3F_V3F,0,VertexArray1);
glDrawArrays(GL_TRIANGLES,0,3);
glPushMatrix();
glRotatef(g_rorate,1,1,0);
//glutSolidCube(20);
glutSolidTeapot(20);
glPopMatrix();
glPushMatrix();
glTranslatef(50,0,0);
glutSolidTorus(5,10,20,20);
glPopMatrix();
glutSwapBuffers();
glutPostRedisplay();
g_rorate += 0.5;
}
void reshape(int w, int h)
{
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45,1.3333,1.0,10000);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void key(unsigned char c, int x ,int y)
{
switch(c)
{
case 'P':
case 'p':
glPolygonMode(GL_FRONT,GL_LINE);
glEnable(GL_CULL_FACE);
//glEnable(GL_DEPTH_TEST);
break;
case 's':
case 'S':
glPolygonMode(GL_FRONT,GL_FILL);
glDisable(GL_CULL_FACE);
//glDisable(GL_DEPTH_TEST);
break;
case 27:
exit(0);
}
}
void init()
{
glClearColor(0.5,0.5,0.5,1.0);
glLightfv(GL_LIGHT0,GL_POSITION,lightPosDirec);
glLightfv(GL_LIGHT0,GL_SPECULAR,specularLight);
//glLightfv(GL_LIGHT0,GL_DIFFUSE,difussLight);
glLightModelfv(GL_LIGHT_MODEL_AMBIENT,ambientLight);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
glLightfv(GL_LIGHT1,GL_AMBIENT,light1_ambient);
glLightfv(GL_LIGHT1,GL_DIFFUSE,light1_diffuse);
glLightfv(GL_LIGHT1,GL_SPECULAR,light1_specular);
glLightfv(GL_LIGHT1,GL_POSITION,light1_pos);
glLightfv(GL_LIGHT1,GL_SPOT_DIRECTION,light1_direction);
glLightf(GL_LIGHT1,GL_SPOT_CUTOFF,10.0);
glLightf(GL_LIGHT1,GL_SPOT_EXPONENT,2);
glEnable(GL_LIGHT1);
glShadeModel(GL_SMOOTH);
glColorMaterial(GL_FRONT,GL_AMBIENT_AND_DIFFUSE);
glEnable(GL_COLOR_MATERIAL);
glCullFace(GL_BACK);
glEnable(GL_CULL_FACE);
glEnable(GL_DEPTH_TEST);
}
int main(int argc, char* argv[])
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowPosition(200,100);
glutInitWindowSize(800,600);
glutCreateWindow("light1-demo");
glewInit();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(key);
init();
glutMainLoop();
}
转载于:https://my.oschina.net/lyr/blog/109278