最近没怎么写程序 今天看了光照这个部分写了个光照旋转的正方体。以下是源代码:
#include <gl/glut.h>
const GLfloat redLightColor[]={1.0,0.0,0.0,1.0};
const GLfloat redLightPos[]={2.0,2.0,10.0,1.0};
const GLfloat greenLightColor[]={0.1,0.6,0.2,1.0};
const GLfloat greenLightPos[]={0.0,0.0,10.0,1.0};
float angle;
void DrawCube()
{
glBegin(GL_QUADS);
glColor3f(0.0f,0.0f,1.0f);
glVertex3f( 5.0f, 5.0f,-5.0f);
glVertex3f(-5.0f, 5.0f,-5.0f);
glVertex3f(-5.0f, 5.0f, 5.0f);
glVertex3f( 5.0f, 5.0f, 5.0f);
glVertex3f( 5.0f,-5.0f, 5.0f);
glVertex3f(-5.0f,-5.0f, 5.0f);
glVertex3f(-5.0f,-5.0f,-5.0f);
glVertex3f( 5.0f,-5.0f,-5.0f);
glVertex3f( 5.0f, 5.0f, 5.0f);
glVertex3f(-5.0f, 5.0f, 5.0f);
glVertex3f(-5.0f,-5.0f, 5.0f);
glVertex3f( 5.0f,-5.0f, 5.0f);
glVertex3f( 5.0f,-5.0f,-5.0f);
glVertex3f(-5.0f,-5.0f,-5.0f);
glVertex3f(-5.0f, 5.0f,-5.0f);
glVertex3f( 5.0f, 5.0f,-5.0f);
glVertex3f(-5.0f, 5.0f, 5.0f);
glVertex3f(-5.0f, 5.0f,-5.0f);
glVertex3f(-5.0f,-5.0f,-5.0f);
glVertex3f(-5.0f,-5.0f, 5.0f);
glVertex3f( 5.0f, 5.0f,-5.0f);
glVertex3f( 5.0f, 5.0f, 5.0f);
glVertex3f( 5.0f,-5.0f, 5.0f);
glVertex3f( 5.0f,-5.0f,-5.0f);
glEnd();
}
void Init()
{
glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glLightfv(GL_LIGHT0,GL_AMBIENT,redLightColor);
glLightfv(GL_LIGHT0,GL_DIFFUSE,redLightColor);
glLightfv(GL_LIGHT0,GL_SPECULAR,redLightColor);
glEnable(GL_LIGHT1);
glLightfv(GL_LIGHT1,GL_AMBIENT,greenLightColor);
glLightfv(GL_LIGHT1,GL_DIFFUSE,greenLightColor);
glLightfv(GL_LIGHT1,GL_SPECULAR,greenLightColor);
}
void reshape(int width,int height)
{
if(height==0)
{
height=1;
}
glViewport(0,0,width,height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0,width/height,1.0,1000.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);
glLoadIdentity();
gluLookAt(0.0,0.0,20.0,0.0,0.0,0.0,0.0,1.0,0.0);
glPushMatrix();
glRotatef(angle,1.0,0.0,0.0);
// glutWireCube(9.0);
DrawCube();
glPopMatrix();
glPushMatrix();
glDisable(GL_LIGHTING);
//glRotatef(angle,1.0,0.0,0.0);
//glRotatef(angle,0.0,1.0,0.0);
glLightfv(GL_LIGHT0,GL_POSITION,redLightPos);
glTranslatef(redLightPos[0],redLightPos[1],redLightPos[2]);
glColor3fv(redLightColor);
glutSolidSphere(0.5,10,8);
glEnable(GL_LIGHTING);
glPopMatrix();
glPushMatrix();
glDisable(GL_LIGHTING);
glRotatef(angle,1.0,0.0,0.0);
glRotatef(angle,0.0,1.0,0.0);
glLightfv(GL_LIGHT2,GL_POSITION,greenLightPos);
glTranslatef(greenLightPos[0],greenLightPos[1],greenLightPos[2]);
glColor3fv(greenLightColor);
glutSolidSphere(0.5,10,8);
glEnable(GL_LIGHTING);
glPopMatrix();
GLfloat cubeColor[]={0.6,0.7,1.0,1.0};
GLfloat cubeSpecular[]={1.0,1.0,1.0,1.0};
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, cubeColor);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, cubeSpecular);
glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 128.0f);
glFlush();
glutSwapBuffers();
}
void Idle()
{
angle+=2.0;
display();
}
int main(int argc,char **argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
glutInitWindowSize(500,500);
glutInitWindowPosition(100,100);
glutCreateWindow(argv[0]);
Init();
glutDisplayFunc(display);
glutIdleFunc(Idle);
glutReshapeFunc(reshape);
glutMainLoop();
return 0;
}
不好意思,一个注释也没有,我很懒,嘿嘿。
![](https://img-my.csdn.net/uploads/201211/29/1354180175_3774.jpg)