使用 Core 配置文件在 OpenSceneGraph 中照明
Lighting in OpenSceneGraph with Core profile
我使用 OpenSceneGraph,我想使用 OpenGL 3.3 和核心配置文件的一些功能。我使用 -DOPENGL_PROFILE=GL3
选项编译了 OpenSceneGraph。我得到了我想要的功能,但是,OSG 的某些功能不再起作用,如使用 osg::Light
、osg::LineWidth
、osg::LineStipple
等照明。
我知道 OSG 主要基于 GL2 功能构建,核心配置文件中不提供固定功能管道,但我预计 "basic" 功能如灯光或线条可以工作。
是否计划在 Core profile 中支持这些功能?还是我必须自己实现着色器?或者有没有现成的实现?
照明和点画是 GL2/legacy 功能。当你去 GL3/Core 时,如果不编写自己的着色器,你将失去做这些事情的所有能力。
虽然 OSG 可以尝试自动为您做这些事情,但在实践中,您只会在非常短的时间内使用该功能,然后您不得不绕过它并编写自己的着色器。查看您可以在图表上手动执行的 ShaderGen Visitor,以帮助您完成其中的一些工作:https://github.com/openscenegraph/OpenSceneGraph/blob/master/src/osgUtil/ShaderGen.cpp
灯光等数据可以作为 Uniform 向下推送到场景图形,然后供您的着色器使用。
我使用 OpenSceneGraph,我想使用 OpenGL 3.3 和核心配置文件的一些功能。我使用 -DOPENGL_PROFILE=GL3
选项编译了 OpenSceneGraph。我得到了我想要的功能,但是,OSG 的某些功能不再起作用,如使用 osg::Light
、osg::LineWidth
、osg::LineStipple
等照明。
我知道 OSG 主要基于 GL2 功能构建,核心配置文件中不提供固定功能管道,但我预计 "basic" 功能如灯光或线条可以工作。
是否计划在 Core profile 中支持这些功能?还是我必须自己实现着色器?或者有没有现成的实现?
照明和点画是 GL2/legacy 功能。当你去 GL3/Core 时,如果不编写自己的着色器,你将失去做这些事情的所有能力。
虽然 OSG 可以尝试自动为您做这些事情,但在实践中,您只会在非常短的时间内使用该功能,然后您不得不绕过它并编写自己的着色器。查看您可以在图表上手动执行的 ShaderGen Visitor,以帮助您完成其中的一些工作:https://github.com/openscenegraph/OpenSceneGraph/blob/master/src/osgUtil/ShaderGen.cpp
灯光等数据可以作为 Uniform 向下推送到场景图形,然后供您的着色器使用。