我正在使用opengl进行一个项目(我是初学者),我在照明方面遇到了麻烦。
我有2个绘图方法:一个用于渲染,另一个用于拾取刻面。 渲染方法似乎没问题,因为当我评论拾取方法时,它正常工作。我尝试了一些事情,发现它是glBegin()调用(在“pick method”中)引发了这个问题:glBegin对ligthing有什么影响吗?
我按照这样设置灯光:
void GLView::createLight(int LightID, const Vector3 &Position, const Vector3 &Color, const float* ambient)
{
glLightfv(LightID,GL_AMBIENT, ambient);
glLightfv(LightID,GL_POSITION,&Position.v[0]);
glLightfv(LightID,GL_DIFFUSE,&Color.v[0]);
glEnable(LightID);
}
void GLView::setLights()
{
float diffuse[]={1,1,1,1};
float lmodel_ambient[4] = {0.5f, 0.5f, 0.5f, 0.5f};
float ambient_0[] = {0.0f,0.0f,0.0f,1.0f};
glMaterialfv(GL_FRONT_AND_BACK,GL_DIFFUSE,&diffuse[0]);
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,1);
createLight(GL_LIGHT0,Vector3(0,0.3,1),Vector3(0.7,0.7,0.7),&ambient_0[0]);
createLight(GL_LIGHT1,Vector3(-1,0,0.3),Vector3(0.4,0.2,0),&ambient_0[0]);
createLight(GL_LIGHT2,Vector3(1,-0.2,0.1),Vector3(0,0.05,0.15),&ambient_0[0]);
}
绘图方法:
void GLView::draw(TRenderStyle RenderStyle)
{
int W=width();
int H=height();
float WW=W/2;
float HH=H/2;
float Zoom=camera->Zoom*std::min(width(),height());
float Lens=HH/tan(FieldOfView/360*acos(-1));
glEnable(GL_NORMALIZE);
glEnable(GL_CULL_FACE);
glDisable(GL_FOG);
glDisable(GL_BLEND);
glDisable(GL_LIGHTING);
glColorMask(true,true,true,true);
switch (RenderStyle)
{
case rsScene:{
//rendering
}
break;
case rsMouseWindow: //for picking facets
case rsMouseAction:{
glBegin(GL_TRIANGLES); //it's working fine if I comment these 2 lines
glEnd();
}
break;
}
}
我知道这是一个模糊的问题,但它真的看起来像glBegin正在影响照明,我不知道该怎么办。
感谢您的帮助。
***编辑:问题是当调用glBegin()时,只有最后一个初始化灯正在工作。