)
环境说明代码使用osg3.6版本。不同版本的API会有变化,可能编译不过或没有效果。如果要运行代码,请确定使用osg3.6版本。本文以Qt作为渲染窗口载体,osgqt的编译实现不在介绍范围内,默认已经编译通过。目的以一个完整的三维场景中,窗口右上方叠加渲染视频流的例子,介绍osg画中画的实现。连载说明考虑到完整的画中画实现,涉及到HUD相机,动态构建能缩放的矩形几何节点和opencv控制视频流三个部分,所以用连载方式一步步说明,并给出代码。HUD相机在OSG(OpenSceneGraph)中,HUD(Head Up Display,平视显示器)相机是一种特殊的相机,用于在三维场景之上固定显示二维信息(如文字、图标、状态面板等),且这些信息不会随着主场景的视角变换而改变位置。要创建一个标准的HUD相机,通常需要遵循以下核心步骤和配置:创建新相机:首先需要创建一个独立的osg::Camera对象。设置参考帧为绝对型:调用setReferenceFrame(osg::Transform::ABSOLUTE_RF)。这能确保HUD不受父节点或场景中其他图形变换的影响3。设置视图矩阵为单位矩阵:调用setViewMatrix(osg::Matrix::identity()),进一步保证节点不随场景视点变化而变化3。设置正交投影矩阵:HUD通常是二维平面显示,因此需要使用正交投影(Orthographic Projection)。通常通过setProjectionMatrix(osg::Matrix::ortho2D(...))设定虚拟投影窗口的大小,这决定了后续绘制的图形和文字的尺度比例封装代码/