我使用此代码声明一组灯光,然后打开和关闭它们。
全向灯按照预期工作,但无论我在方向矢量中放置的值,聚光灯总是朝下。如果我从文件或硬编码中读取它,或者它具有什么样的疯狂价值,那么最终结果总是一样的。
void TPscene::letThereBeLight()
{
printf("CREATING LIGHTS...\n");
for(unsigned int i = 0; i < iv->getLights().size(); i++)
{
Light* l = iv->getLights().at(i);
float light_pos[4] = {l->getLocation()[0], l->getLocation()[1], l->getLocation()[2], 1.0};
float* ambient = l->getAmbient();
float* diffuse = l->getDiffuse();
float* specular = l->getSpecular();
CGFlight* light = new CGFlight(lightId(i), light_pos);
light->setAmbient(ambient);
light->setDiffuse(diffuse);
light->setSpecular(specular);
if(strcmp(iv->getLights().at(i)->getType(),"spot")==0)
{
float angle = iv->getLights().at(i)->getAngle();
float exp = iv->getLights().at(i)->getExponent();
float* direction = iv->getLights().at(i)->getDirection();
GLfloat spotDir[] = { 0, 1, 0 };
glLightf(lightId(i),GL_SPOT_CUTOFF,angle);
glLightf(lightId(i),GL_SPOT_EXPONENT,exp);
glLightfv(lightId(i),GL_SPOT_DIRECTION,spotDir);
}
if(l->getEnabled()==true)
light->enable();
else if(l->getEnabled()==false)
light->disable();
lights.push_back(light);
}
}
编辑: 抱歉,我需要多长时间才能更新。 问题是我们以更容易的方式使用灯光的图书馆没有考虑到其更新功能中聚光灯的方向。 我设法通过确保每个显示周期更新方向来解决问题。