OpenGL聚光灯光照没有出现的问题.

tiwafic 2009-10-24 03:31:18
我为OpenGL的光照设置了一个类Light,如下:
class OpenGLLight
{
public:
//光照
float ambbientLight[4];
float diffuseLight[4];
float spotlightPosition[4];
float spotlightDirection[3];

//材质
float matAmbient[4];
float matDiff[4];
float matSpecualr[4];

public:
void Initialize();
};



定义代码如下:

void OpenGLLight::Initialize()
{
ambbientLight[0]=0.5f;
ambbientLight[1]=0.5f;
ambbientLight[2]=0.5f;
ambbientLight[3]=1.0f; //环境光

diffuseLight[0]=0.5f;
diffuseLight[1]=0.5f;
diffuseLight[2]=0.5f;
diffuseLight[4]=1.0f; //散射光

spotlightPosition[0]=6.0f;
spotlightPosition[1]=0.5f;
spotlightPosition[2]=0.5f;
spotlightPosition[3]=1.0f; //聚光灯位置

spotlightDirection[0]=-1.0f;
spotlightDirection[1]=0.0f;
spotlightDirection[2]=-1.0f; //聚光灯方向

matAmbient[0]=1.0f;
matAmbient[1]=1.0f;
matAmbient[2]=1.0f;
matAmbient[3]=1.0f; //环境光材质属性

matDiff[0]=1.0f;
matDiff[1]=1.0f;
matDiff[2]=1.0f;
matDiff[3]=1.0f; //散射光材质属性

matSpecualr[0]=1.0f;
matSpecualr[1]=1.0f;
matSpecualr[2]=1.0f;
matSpecualr[3]=1.0f; //镜面反射光材质属性

glClearColor(0.0f,0.0f,0.0f,0.0f); //清理为黑色
glShadeModel(GL_SMOOTH); //使用平滑明暗处理
glEnable(GL_DEPTH_TEST); //启用深度检测
glEnable(GL_CULL_FACE); //不计算多边形背面
glFrontFace(GL_CCW); //多边形逆时针为正面

glEnable(GL_LIGHTING); //启用光照

//设置环境光分量
glLightfv(GL_LIGHT0,GL_AMBIENT,ambbientLight);
//设置散射光分量
glLightfv(GL_LIGHT0,GL_DIFFUSE,ambbientLight);
//设置光源位置
glLightfv(GL_LIGHT0,GL_POSITION,spotlightPosition);

//聚光灯属性
glLightf(GL_LIGHT0,GL_SPOT_CUTOFF,40.0f); //聚光灯80度 张角
glLightf(GL_LIGHT0,GL_SPOT_EXPONENT,30.0f);
glLightfv(GL_LIGHT0,GL_SPOT_DIRECTION,spotlightDirection);

//启用光源
glEnable(GL_LIGHT0);

//使用glColor()函式来为环境光和散射光跟踪颜色设置
glEnable(GL_COLOR_MATERIAL);
glColorMaterial(GL_FRONT,GL_AMBIENT_AND_DIFFUSE);

//材质具有最小反射率
glMaterialfv(GL_FRONT,GL_SPECULAR,matSpecualr);
glMaterialf(GL_FRONT,GL_SHININESS,10.0f);
}



同时我在消息循环里面如下:

while (!done)
{
PeekMessage(&msg,NULL,NULL,NULL,PM_REMOVE);
if(msg.message==WM_QUIT) //检测是否收到退出消息
{
done=true;
}
else
{
Light.Initialize();
OpenGLIn.Render();

SwapBuffers(g_HDC); //交换前后缓存

TranslateMessage(&msg);
DispatchMessage(&msg);
}
}


调用的Render函式为:

void OpenGLInit::Render()
{
glClearColor(0.0f,0.0f,0.0f,0.0f); //设置清理颜色为黑色
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); //清理颜色/深度缓存
glLoadIdentity();

glColor3f(0.0f,0.5f,0.5f);

//绘制
auxSolidSphere(9.0);

glFlush();

}


可是运行之后屏幕并没有出现聚光灯,也没有出现auxSolidSphere(9.0);所绘制出来的东西,是怎么回事呢?谢谢各位.
...全文
568 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
tiwafic 2009-10-25
  • 打赏
  • 举报
回复
谢谢诸位大大了..
hufen2740 2009-10-24
  • 打赏
  • 举报
回复
去游戏区吧

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧