在opengl中创建路灯 我试图用C++在我的环境中创建街灯。我需要为此创建聚光灯,我已经编写了下面的代码,但它不能作为聚光灯工作。我做错了什么,或者你有其他解决我问题的方法吗 GLfloat ambientLight[] = {0.7f, 0.2f, 0.2f, 1.0f}; glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientLight); GLfloat directedLight[] = {0.7f, 0.7f, 0.7f, 1.0f}; GLfloat directedLightPos[] = {-10.0f, 15.0f, 20.0f, 0.0f}; glLightfv(GL_LIGHT0, GL_DIFFUSE, directedLight); glLightfv(GL_LIGHT0, GL_POSITION, directedLightPos);

在opengl中创建路灯 我试图用C++在我的环境中创建街灯。我需要为此创建聚光灯,我已经编写了下面的代码,但它不能作为聚光灯工作。我做错了什么,或者你有其他解决我问题的方法吗 GLfloat ambientLight[] = {0.7f, 0.2f, 0.2f, 1.0f}; glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientLight); GLfloat directedLight[] = {0.7f, 0.7f, 0.7f, 1.0f}; GLfloat directedLightPos[] = {-10.0f, 15.0f, 20.0f, 0.0f}; glLightfv(GL_LIGHT0, GL_DIFFUSE, directedLight); glLightfv(GL_LIGHT0, GL_POSITION, directedLightPos);,c++,opengl,C++,Opengl,谢谢。如果这是您所有的光代码,那么您缺少了一些重要的行。仅定义环境光/漫反射光颜色和灯光位置 您需要使用以下选项启用照明:glEnable(GL\U照明) 您需要启用正在使用的灯光:例如:glEnable(GL\U LIGHT0) 我不确定,但我认为您还需要定义材质() 您需要定义灯光的方向:glLightfv(GL\u LIGHT0,GL\u SPOT\u方向,方向) 其他两项说明: 确保法向量设置正确,否则将看不到结果 如果我没记错的话,固定功能照明只适用于顶点,而不适用于像素。所以,

谢谢。

如果这是您所有的光代码,那么您缺少了一些重要的行。仅定义环境光/漫反射光颜色和灯光位置

  • 您需要使用以下选项启用照明:
    glEnable(GL\U照明)
  • 您需要启用正在使用的灯光:例如:
    glEnable(GL\U LIGHT0)
  • 我不确定,但我认为您还需要定义材质()
  • 您需要定义灯光的方向:
    glLightfv(GL\u LIGHT0,GL\u SPOT\u方向,方向)
其他两项说明:

  • 确保法向量设置正确,否则将看不到结果
  • 如果我没记错的话,固定功能照明只适用于顶点,而不适用于像素。所以,如果你有一个光源在一个四边形上方,你将看不到任何光点
请注意,在“新”opengl(core 3.+)中没有“照明”支持。所有这些枚举和函数都已弃用

因此,您可能需要寻找一些其他解决方案:


同样值得一提的是,那些“旧”的照明功能非常易于使用,并且具有很多教学上的优势。

+1。另外:位置上的最后一个元素对于聚光灯必须为非零,GL_SPOT_截止值必须小于90(light0的默认值为180)。感谢您的回答。我编辑了我的代码如下,但环境仍然是黑暗的。我错过了什么?glEnable(德国劳埃德大学照明);glEnable(GL_LIGHT0);GLfloat spotlightcolor[]={1.0,0.0,1.0};GLfloat spotlightDirection[]={0.0,-1.0,0.0};GLfloat directedLightPos[]={100.0f,100.0f,100.0f,10.0f};glLightf(GL_LIGHT0,GL_SPOT_截断,45);glLightfv(GL_LIGHT0,GL_SPOT_方向,spotlightDirection);glLightfv(GLU LIGHT0、GLU位置、directedLightPos);glLightfv(GL_LIGHT0、GL_镜面反射、spotlightcolor);glLightf(GL_LIGHT0,GL_SPOT_指数,120);