1

我正在尝试在我的场景中设置照明,但由于某种原因它不起作用,我试图找出原因

这是我初始化 OpenGL 的方式:

glClearColor(0.0, 0.0, 0.0, 0.0);
glClearDepth(1.0);
glDepthFunc(GL_LESS);
glEnable(GL_DEPTH_TEST);
glShadeModel(GL_SMOOTH);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_LIGHTING);
glEnable(GL_NORMALIZE);
glEnable(GL_LIGHT0);

以下是我尝试在开启照明的情况下进行绘制的方法:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
glLoadIdentity();
GLfloat diffuse0[]={1.0, 1.0, 1.0, 1.0};
GLfloat ambient0[]={1.0, 1.0, 1.0, 1.0};
GLfloat specular0[]={1.0, 1.0, 1.0, 1.0};
GLfloat light0_pos[]={1.0, 1.0, 1,0, 1.0};

glLightfv(GL_LIGHT0, GL_POSITION, light0_pos);
glLightfv(GL_LIGHT0, GL_AMBIENT, ambient0);
glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse0);
glLightfv(GL_LIGHT0, GL_SPECULAR, specular0);

glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 2.0);
glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 1.0);
glLightf(GL_LIGHT0, GL_QUADRATIC_ATTENUATION, 2.0);

object->draw();

物体完全不受光照影响

设置所有法线以及opengl照明场景所需的所有信息

有没有……我错过了什么?

编辑:好的!我终于找到了解决问题的方法。我的opengl init函数在我必须在显示窗口之后而不是之前调用它的代码中放错了位置,这就是导致问题的原因......

4

1 回答 1

1

也许你应该告诉我们物体的位置。

  • 嫌疑人一:物体位置与灯光距离太远
  • 嫌疑人 2:隐藏所有 ATTENUATION 设置或将 LINEARATTENUATION 设为 0.0
于 2012-07-26T12:41:46.313 回答