光照

来源:互联网 发布:linux mkdir创建目录 编辑:程序博客网 时间:2024/06/11 18:27

最近没怎么写程序 今天看了光照这个部分写了个光照旋转的正方体。以下是源代码:

#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; }
不好意思,一个注释也没有,我很懒,嘿嘿。



原创粉丝点击