Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GLObjViewer(OpenGL)中的多个灯光_Opengl - Fatal编程技术网

GLObjViewer(OpenGL)中的多个灯光

GLObjViewer(OpenGL)中的多个灯光,opengl,Opengl,我正在用OpenGL构建一个3D房子。我决定使用GLObjViewer加载模型和纹理。那很好。 但GLObjViewer的着色模块只支持“一个固定的定向光源沿着OpenGL默认的负z轴照射”,正如其文档所述。 所以当我修好灯的时候,有些墙会变黑;当我使灯光随相机移动时,墙的阴影会不断变化 我现在想要的是让所有的墙都有很好的照明,并且它们的阴影在移动相机后不会改变。请告诉我怎么买得起?(如何在GLObjViewer或其他解决方案中使用多个灯光) 您可以在此处找到GLObjViewer文档和源代码:

我正在用OpenGL构建一个3D房子。我决定使用GLObjViewer加载模型和纹理。那很好。 但GLObjViewer的着色模块只支持“一个固定的定向光源沿着OpenGL默认的负z轴照射”,正如其文档所述。 所以当我修好灯的时候,有些墙会变黑;当我使灯光随相机移动时,墙的阴影会不断变化

我现在想要的是让所有的墙都有很好的照明,并且它们的阴影在移动相机后不会改变。请告诉我怎么买得起?(如何在GLObjViewer或其他解决方案中使用多个灯光)


您可以在此处找到GLObjViewer文档和源代码:

OpenGL-2灯光定位由modelview矩阵转换。这意味着您必须在放置摄影机之后但在应用对象局部变换之前设置灯光位置

版本3之前的OpenGL至少支持8个灯光(GL_LIGHT0…GL_LIGHT7)。可以单独启用和设置。更高版本的OpenGL完全由着色器驱动;灯光通过适当的着色器实现,灯光参数通过制服传递

OpenGL-3兼容性和早期版本具有预定义的制服,如本应用程序中使用的
gl\u LightPosition[]
。您可以通过适当的OpenGL状态设置器设置这些预定义的制服<代码>glLight…在您的情况下


OpenGL-3.1 core和更高版本一起放弃预定义的灯光制服,并将实现它的负担放在程序员身上。

您可能也有一些运气:

glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, 1);
这将从眼睛坐标系的原点计算镜面反射,而不是静态计算(平行于和朝向-z轴的方向)