opengl的光源有关问题,新手刚开始学,求教了

opengl的光源问题,新手刚开始学,求教了!
想做个点光源,但没有效果,只有环境光好漫反射光的,请问是哪里的问题?程序如下


//Provide a project with a blank window 
#include "GL/glut.h"
#include "windows.h"
#include <iostream>
#include <string>
using    namespace    std;   

#define DWORD unsigned long
#define FALSE 0

GLfloat xrot; // X Rotation ( NEW )
GLfloat yrot; // Y Rotation ( NEW )
GLfloat zrot; // Z Rotation ( NEW )

GLuint texture[1]; // 存储一个纹理

GLfloat LightAmbient[]= { 0.0f, 0.0f, 0.0f, 1.0f };    // 环境光参数
GLfloat LightDiffuse[]= { 0.0f, 0.0f, 0.0f, 1.0f };  // 漫射光参数
GLfloat LightPosition[]= { 0.0f, 0.0f, 1.0f, 1.0f };  // 光源位置
GLfloat a[] = { 0.0, 0.0, -1.0 };                        //点光源射出方向
GLfloat mat_specular[] = { 0.0, 0.0, 0.0, 1.0 };        //材质
GLfloat mat_shininess[] = { 50.0 };
GLfloat light_specular[] = { 0.2, 0.2, 0.2, 1.0 };
GLfloat diffuseCoeff[] = { 1.0f, 1.0f, 1.0f, 1.0f };


 
bool LoadTexture(LPTSTR szFileName, GLuint &texid)  //Creates Texture From A Bitmap File
{
  HBITMAP hBMP; // Handle Of The Bitmap
  BITMAP BMP;  //Bitmap Structure

  glGenTextures(1, &texid);  //Create The Texture
  hBMP=(HBITMAP)LoadImage(GetModuleHandle(NULL), szFileName, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION|LR_LOADFROMFILE);

  if (!hBMP)                 //Does The Bitmap Exist
  return FALSE;              //If Not Return False

   GetObject(hBMP, sizeof(BMP), &BMP);  //Get The Object
                             //hBMP Handle To Graphics Object
                             //sizeof(BMP) Size Of Buffer For Object Information
                             //&BMP Buffer For Object Information

   glPixelStorei(GL_UNPACK_ALIGNMENT, 4);  //Pixel Storage Mode (Word Alignment  4 Bytes)
   //Typical Texture Generation Using Data From The Bitmap
   glBindTexture(GL_TEXTURE_2D, texid);  //Bind To The Texture ID
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);  //Linear Min Filter
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);  //Linear Mag Filter
   glTexImage2D(GL_TEXTURE_2D, 0, 3, BMP.bmWidth, BMP.bmHeight, 0, GL_BGR_EXT, GL_UNSIGNED_BYTE, BMP.bmBits);

   DeleteObject(hBMP);  //Delete The Object

   return TRUE;  //Loading Was Successful
}


//渲染函数
void RenderScene(void)
{                                                // 场景绘制
//清空
glClear(GL_COLOR_BUFFER_BIT);
//压栈,保留世界坐标位置
glPushMatrix();

    //Add your code here
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清除屏幕和深度缓存
glLoadIdentity();         // 重置当前的模型观察矩阵
glTranslatef(0.0f,0.0f,-10.0f); // 移入屏幕 5 个单位

    glRotatef(xrot,1.0f,0.0f,0.0f);     // 绕X轴旋转
glRotatef(yrot,0.0f,1.0f,0.0f); // 绕Y轴旋转
glRotatef(zrot,0.0f,0.0f,1.0f); // 绕Z轴旋转


       glBindTexture(GL_TEXTURE_2D, texture[0]); // 选择纹理
   
       glBegin(GL_QUADS);
// 前面
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f); // 纹理和四边形的左下
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f); // 纹理和四边形的右下
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f,  1.0f); // 纹理和四边形的右上
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f,  1.0f); // 纹理和四边形的左上
// 后面
glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); // 纹理和四边形的右下
glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f); // 纹理和四边形的右上
glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f); // 纹理和四边形的左上
glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f); // 纹理和四边形的左下
// 顶面
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f); // 纹理和四边形的左上
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f,  1.0f,  1.0f); // 纹理和四边形的左下
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f,  1.0f,  1.0f); // 纹理和四边形的右下
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f); // 纹理和四边形的右上
// 底面
glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f); // 纹理和四边形的右上
glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, -1.0f); // 纹理和四边形的左上
glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f); // 纹理和四边形的左下
glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f); // 纹理和四边形的右下
// 右面
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f); // 纹理和四边形的右下
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f); // 纹理和四边形的右上
glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f,  1.0f,  1.0f); // 纹理和四边形的左上
glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f); // 纹理和四边形的左下
// 左面
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); // 纹理和四边形的左下
glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f); // 纹理和四边形的右下
glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f,  1.0f,  1.0f); // 纹理和四边形的右上
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f); // 纹理和四边形的左上
glEnd();

    xrot+=0.05f;      // X 轴旋转
yrot+=0.05f;      // Y 轴旋转
//zrot+=0.3f;      // Z 轴旋转

glutPostRedisplay();

    //恢复世界坐标位置
glPopMatrix();
//切换双缓存
glutSwapBuffers();
}

///////////////////////////////////////////////////////////
void SetupRC(void)
{
//设置清屏颜色
//if(!LoadTexture("Skin/exp3.bmp",*texture)) 
    //{
// return ;             // 如果未能载入,返回
//}
LoadTexture("Skin/exp4.bmp",*texture);

glEnable(GL_TEXTURE_2D);     // 启用纹理映射
glShadeModel(GL_SMOOTH);     // 启用阴影平滑
glClearColor(0.0f, 0.0f, 0.0f, 0.5f); // 黑色背景
glClearDepth(1.0f);         // 设置深度缓存
glEnable(GL_DEPTH_TEST);     // 启用深度测试
glDepthFunc(GL_LEQUAL);     // 所作深度测试的类型
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // 真正精细的透视修正


glEnable(GL_COLOR_MATERIAL);
    glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, diffuseCoeff);
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);


glEnable(GL_LIGHTING);
    glLightfv(GL_LIGHT0, GL_AMBIENT, LightAmbient); // 设置环境光
glEnable(GL_LIGHT0);     // 启用一号光源


glEnable(GL_LIGHTING);
glLightfv(GL_LIGHT1, GL_DIFFUSE, LightDiffuse); // 设置漫射光
glLightfv(GL_LIGHT1, GL_POSITION,LightPosition); // 设置光源位置
glLightfv(GL_LIGHT1, GL_SPECULAR, light_specular);
glEnable(GL_LIGHT1);

glEnable(GL_LIGHTING);                                 //设置点光源
glLightfv(GL_LIGHT3, GL_SPECULAR, light_specular);
glLightfv(GL_LIGHT2, GL_POSITION, LightPosition);
glLightf(GL_LIGHT2, GL_SPOT_CUTOFF, 40);
glLightfv(GL_LIGHT2, GL_SPOT_DIRECTION, a);
glLightf(GL_LIGHT2, GL_SPOT_EXPONENT, 2.0);
glEnable(GL_LIGHT2);



//glEnable(GL_LIGHTING);                         // 启用用0号灯光


}
///////////////////////////////////////////////////////////
void ChangeSize(int w, int h)
{
GLfloat fAspect;
if(h == 0)
h = 1;

//设置视口
glViewport(0, 0, w, h);

//获得屏幕宽高比
fAspect = (GLfloat)w/(GLfloat)h;

//切换到投影矩阵
glMatrixMode(GL_PROJECTION);

//重载为单位矩阵
glLoadIdentity();

//设置为透视图
gluPerspective(35.0f, fAspect, 1.0, 40.0);

//切换回模型矩阵
glMatrixMode(GL_MODELVIEW);

//重载为单位矩阵
glLoadIdentity();
}
///////////////////////////////////////////////////////////
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);

glutInitWindowSize(800, 600);
glutCreateWindow("Exp3:opengl texture");

glutReshapeFunc(ChangeSize);
glutDisplayFunc(RenderScene);
SetupRC();

glutMainLoop();

return 0;
}

------解决思路----------------------
光源慢慢调 , 把其它光关掉,只用点光试一下,看你代码没有用到glcolor,把color material关掉,
点光的颜色也没有设置
------解决思路----------------------
搜网络教程“学OpenGL编3D游戏”。