OSG开发笔记(一):OSG介绍、编译

本文介绍了OpenSceneGraph(OSG)的基本概念、优势以及编译过程。OSG是一个基于OpenGL的高性能3D图形库,支持多种平台。文章详细讲解了如何下载OSG源码,使用CMake配置,并添加Qt5支持及freetype字体插件的编译步骤,为读者提供了一条清晰的OSG开发入门路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

​​​​​​​OSG开发专栏(点击传送门)

上一篇:无

下一篇:OSG开发笔记(二):OSG帮助文档编译

前言

       需要用到三维立体变换、三维球体等三维开发,之前准备使用opengl,但是opengl较为底层,综合考量选型osg。

OSG概述

简介

       OpenSceneGraph(简称OSG)使用OpenGL技术开发,是一套基于C++平台的应用程序接口(API),它让程序员能够更加快速、便捷地创建高性能、跨平台的交互式图形程序。它作为中间件(middleware)为应用软件提供了各种高级渲染特性,IO,以及空间结构组织函数;而更低层次的OpenGL 硬件抽象层(HAL)实现了底层硬件显示的驱动。

优势

        OpenGL技术为图形元素(多边形、线、点……)和状态(光照、材质、阴影……)的编程提供了标准化的接口。而OSG开发的主要意义在于,将3D场景定义为空间中一系列连续的对象,以进行三维世界的管理。正是由于场景及其参数定义的特点,通过状态转化、绘图管道和自定制等操作,OSG还可以用于优化渲染性能。

        从系统开发人员的角度看,相比工业标准OpenGL 或其它的图形库,OSG的优点显而易见。除了开源和平台无关性以外,它封装并提供了数量众多的提升程序运行时性能的算法、针对包括分页数据库在内的几乎所有主流数据格式的直接数据接口、以及对脚本语言系统Python 和Tcl 的支持,特别的,支持脚本语言系统的意义不仅限于用户可以使用除C++语言以外的工具进行图形系统的开发,事实上,对弱类型计算机语言的支持将突破现有交互式图形系统在人-机交互性能方面的最终限制。 

        OSG采用以下思想和工具进行构建:

  • ANSI标准C++;
  • C++标准模板库(STL);
  • 设计模式(Design patterns)。

        这些工具使得OSG的开发者可以在自己喜好的平台上进行开发,并且依据用户所要求的平台进行配置。

        OSG支持骨骼动画、关键帧动画等各种流行的动画,它可以把3DMAX建立的动画模型转化成OSG格式导入到项目中进行控制,osgAnimation库中有大量的动画实用类。在OSG相关扩展中,最引人注目的是osgEarth、VPB与osgOcean,它们可以帮助开发人员完成一个功能强大且完善的三维地形展示系统,osgEarth功能类似于GoogleEarth,且地形的实时生成效率可媲美GoogleEarth。osgOcean是OSG的扩展海洋模块,特点是可以逼真地仿真大面积水域,也可以在此基础上做二次开发。可实现的效果如下图:

        

       

       

       

       

       

硬件需求

        如今的OSG 已经可以在多种硬件平台和操作系统上运行,并且能够在大部分计算机系统上正常使用。

        处理器:OSG 可以在大部分的CPU 上编译通过。OSG 具备线程安全性,并且可以有效利用多处理器和双核结构的特性。OSG 可以在32 位或者64 位处理器上运行通过。 

        图形:你的计算机系统需要配置一块AGP 或者PCI 总线的图形显示卡。OSG可以在大部分用于建模,仿真和游戏的专业级或大众级图形设备上运行。可以运行OSG 的图形设备必须高效地支持OpenGL,因此你应当从设备商处获得最新的OpenGL 设备驱动程序。OSG 对显卡RAM 的需求因用户的使用而异,但是256MB 应当足够了。OSG 可以在多管(multi-pipe)显示系统上运行,并且可以利用多显卡来提升渲染速度。 

        RAM:最小的系统RAM 内存需求是由显示数据的数量和类型决定的。推荐配置为1GB,大型数据集的开发可能需要更多的内存支持。 

        磁盘:和RAM 一样,磁盘空间的需求大小由数据量决定。对于任何程序来说,更高速和更大容量的磁盘无疑可以减少数据读取的时间。

软件需求

        可以运行OSG的平台需要具备OpenGL的支持能力,以及C++的编译环境,支持OSG的系统包括Solaris,IRIX,Windows,Mac OSX,HP-UX,Sony Platystation等等,不过XBox除外。 和OpenGL类似,OSG的核心并没有提供窗口系统的功能,但是其扩展功能里包含osgviewer可以很好地支持各种显示和操控。当然用户也可以自由选择所需的图形开发接口,如GLUT,X11/Motif,Win32,MacOS X,Qt,wxWindows,Fox等。 
        笔者主要是Qt项目。

OSG编译

下载

        当最新版本为:3.6.3,编译的话存一些奇怪的问题,估计是代码变化了,但是3.4.0就没有这些问题,所以下载3.4.0版本。

       osg官网:Home

       3.6.3 csdn下载:OpenSceneGraph-OpenSceneGraph-3.6.3.rar-C++代码类资源-优快云下载

       3.4.0 csdn下载:OpenSceneGraph-OpenSceneGraph-3.4.0.rar-C++代码类资源-优快云下载

使用cmake配置目标工程

        

补充:附加qt5.9.3的mingw32版本

步骤一:修改源码CMakeList

set(DESIRED_QT_VERSION "5" CACHE STRING "")
set(CMAKE_PREFIX_PATH "C:\Qt\Qt5.9.3\5.9.3\mingw53_32" CACHE PATH "")

        

步骤二:填入Qt5Widget头文件,configure会找到其他

        

补充(2019年7月16日补充):添加字体插件freetype

        添加freetype插件,不添加该插件会在给场景中添加文字无法显示,如下图:

         

步骤一:下载freetType2

       官网地址:FreeType Downloads

步骤二:单独编译freeType2

      

步骤三:使用命令行编译

      

        

步骤四:修改OSG编译的freetype配置

        

        

        

使用qt命名行编译

      

       

       多跑几次make,最后不带-j的状态make一次,因为有些库前后依赖问题。

      

      

编译好的osg库下载(不带qt,不包括osgQt)

        csdn:osg3.4.0-win-mingw32-Lib.rar-QT其他资源-优快云下载

编译好的osg库下载(带qt,包括osgQt)

        csdn:osg3.4.0.rar-QT其他资源-优快云下载

参考资料

        OSG学习记录一_wangyezidong的专栏-优快云博客

上一篇:无

下一篇:OSG开发笔记(二):OSG帮助文档编译

原博主博客地址:长沙红胖子Qt C++ Linux Arm_长沙红胖子_优快云博客-Qt开发,图形图像处理,OpenCV图像处理领域博主
原博主博客导航:红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中..._长沙红胖子Qt C++ Linux Arm-优快云博客_qt 红胖子
本文章博客地址:OSG开发笔记(一):OSG介绍、编译_长沙红胖子Qt C++ Linux Arm-优快云博客_osg

### 微信公众号与服务号的功能和用途区别 #### 功能差异 在功能方面,订阅号和服务号存在显著的不同。对于未经过认证的订阅号而言,无法连接到第三方链接,除非涉及小程序;而未经认证的服务号则可以连接至第三方链接[^1]。 #### 适用场景 当创建者的目的是提供特定的服务时,在不具备认证资格的前提下应优先考虑选择服务号。相反,如果主要意图是以发布文章的形式来进行推广,则订阅号会是个更为合适的选择[^2]。 #### 发展历程中的变化 自微信公众号于2012年底推出以来,经历了多次更新和发展阶段。最初仅有的基础版本逐渐演变为包含多种类型的平台体系——即后来增加的企业号以及持续改进后的现有形态。这些演变使得当前环境下微信公众账号的选择更加多样化,并且允许运营人员依据实际需求做出最佳决策[^3]。 #### 技术支持层面 值得注意的是,在涉及到技术集成或自动化交互等功能实现上,无论是哪种类型的公众账号都离不开`access_token`这重要凭证。它作为访问API接口的关键参数之,在整个应用开发过程中扮演着不可或缺的角色: ```python import requests def get_access_token(appid, secret): url = f"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={appid}&secret={secret}" response = requests.get(url).json() return response['access_token'] ``` 此函数用于获取`access_token`,它是发起任何HTTP请求给微信服务器的前提条件[^4]。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长沙红胖子Qt(技术Q群4597637)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值