【发布时间】:2015-11-05 20:13:07
【问题描述】:
我正在编写一个程序,其中有一个“polyman”小家伙在0,-3 跳舞。我已经把他染成白色,现在正试图让一个迪斯科般的场景开始,我创造了一个蓝色和红色的灯光,并试图通过使用计数器和if 和else 语句来交替它们。这都是我的renderscene
float ambientlight[] = {0.0,0.0,1.0,1.0};
float diffuselight[] = {1.0,1.0,1.0,1.0};
float specular[] = {1.0,1.0,1.0,1.0};
float lightpos[] = {0.0,10.0,0.0,1.0}; //light 1
float specref[]={1.0,1.0,1.0,1.0};
float spotdir[]={0.0,-10.0,0.0};
float rectX[6][5], rectY[6][5], rectZ[6][5];
float ambientlight2[] = {1.0,0.0,0.0,1.0};
float diffuselight2[] = {1.0,1.0,1.0,1.0};
float specular2[] = {1.0,1.0,1.0,1.0};
float lightpos2[] = {0.0,10.0,0.0,1.0}; //light 2
float specref2[]={1.0,1.0,1.0,1.0};
float spotdir2[]={0.0,-10.0,0.0};
glColor3f(1.0,1.0,1.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glViewport(0,0,540,440);
glOrtho(-7.0,7.0,-7.0,7.0,5.0,-5.0);
glEnable(GL_LIGHTING);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
if (counterForLights % 2 == 0) //if counter even
{
glLightfv(GL_LIGHT0, GL_POSITION,lightpos);
glLightfv(GL_LIGHT0,GL_AMBIENT,ambientlight);
glLightfv(GL_LIGHT0,GL_DIFFUSE,diffuselight);
glLightfv(GL_LIGHT0,GL_SPECULAR, specular);
glLightf(GL_LIGHT0,GL_SPOT_CUTOFF,10.0); //light 1
glLightf(GL_LIGHT0,GL_SPOT_EXPONENT,15.0);
glLightfv(GL_LIGHT0,GL_SPOT_DIRECTION,spotdir);
glEnable(GL_LIGHT0);
counterForLights++;
}
else //if counter odd
{
glLightfv(GL_LIGHT1,GL_AMBIENT,ambientlight2);
glLightfv(GL_LIGHT1,GL_DIFFUSE,diffuselight2);
glLightfv(GL_LIGHT1,GL_SPECULAR, specular2);
glLightf(GL_LIGHT1,GL_SPOT_CUTOFF,10.0);
glLightf(GL_LIGHT1,GL_SPOT_EXPONENT,15.0); //light2
glLightfv(GL_LIGHT1,GL_SPOT_DIRECTION,spotdir2);
glEnable(GL_LIGHT1);
counterForLights++;
}
counterForLights 是一个全局变量,等于1。它运行,但从不显示红灯,只显示蓝光。关于我在哪里出错的任何想法?
另外,如果您需要查看我的代码,请告诉我! :)
【问题讨论】:
-
据我所知,第二盏灯唯一的“红色”是环境光部分。由于在典型材料中,环境系数非常低,因此它的影响很小。
标签: c++ opengl if-statement counter light