OpenGL中的光照包括環境光、散色光和鏡面光,在系統中加入光照以后,設置一些材料屬性以后,多邊形才能反射光線,設置材料屬性有兩種方法
程序運行后:






變量的設置:
1 float lightPos[]={0.0,0.0,75.0,1.0};//創建風光位置
2 float specular[]={1.0f,1.0f,1.0f,1.0f};//為光照的鏡面光成分指定了一種非常亮的白色光源
3 float ambientlight[]={0.5,0.5,0.5,1.0};
4 float spotDir[]={0.0,0.0,-1.0};
光照系統初始化:

glEnable(GL_LIGHTING);//啟用光照
glLightModelfv(GL_LIGHT_MODEL_AMBIENT,ambientlight);//設置和啟用光照0,提供一種微弱的環境光,
glLightfv(GL_LIGHT0,GL_AMBIENT,ambientlight);
glLightfv(GL_LIGHT0,GL_SPECULAR,specular);//為light0添加了這種鏡面光成分
glLightfv(GL_LIGHT0,GL_POSITION,lightPos);
glLightf(GL_LIGHT0,GL_SPOT_CUTOFF,60.0);//特定的光點效果,切角為60-把一個位置性光源實際變成一個聚光燈
glEnable(GL_LIGHT0);//特別啟用這用光照
glEnable(GL_COLOR_MATERIAL);//啟用顏色追蹤
glColorMaterial(GL_FRONT,GL_AMBIENT_AND_DIFFUSE);//設置材料屬性,對應與glColor值
//此后所有的材料都具有完全的強光澤鏡面反射屬性
glMaterialfv(GL_FRONT,GL_SPECULAR,specular);
glMateriali(GL_FRONT,GL_SHININESS,128);
場景繪制:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();//首先放置光源,保存坐標轉換
glRotatef(xrot,0.1,1.0,0.0);
glRotatef(yrot,1.0,0.0,0.0);
glRotatef(yrot,0.0,0.0,1.0);
//根據旋轉后的坐標系統指定新的位置和方向
glLightfv(GL_LIGHT0,GL_POSITION, lightPos);
glLightfv(GL_LIGHT0,GL_SPOT_DIRECTION,spotDir);

//繪制一個紅色的錐體 封裝光源
glColor3ub(255,0,0);

//把原點移動到光錐外光的位置
glTranslatef( lightPos[0], lightPos[1], lightPos[2]);

glutSolidCone(4.0f,6.0f,15,15);

//在不同位置繪制一個更小的球體,表示燈泡
//保存光照狀態變量
glPushAttrib(GL_LIGHTING_BIT);

//關閉光照,并指定一個明亮的黃色球體
glDisable(GL_LIGHTING);
glColor3ub(255,255,0);
glutSolidSphere(3.0,15,15);

//恢復光照
glPopAttrib();

//恢復坐標轉換
glPopMatrix();

//設置材料顏色,在中間繪制一個球體
glColor3ub(0,0,255);