画中画,osg三维场景叠加渲染二维纹理HUD相机实现(一)
2026/6/13 8:27:51 网站建设 项目流程

环境说明

代码使用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(...)) 设定虚拟投影窗口的大小,这决定了后续绘制的图形和文字的尺度比例

封装代码</

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询