qt使用camke时,采用vcpkg工具链设置OSG的qt模块osgQOpenGLWidget

【免费】osgQOpenGLWidget嵌入qt模块,VS2022使用cmake的方式,工具链vcpkg资源-CSDN下载

CMake中设置

1.查找osg相关的库,同时也会设置对应include的路径

# 检查是否找到 osg
find_package(OpenSceneGraph 3.6.5REQUIRED COMPONENTS osgosgUtilosgGAosgViewerosgDBosgAnimationosgManipulatorosgParticleosgPresentationosgShadowosgSimosgTerrainosgTextosgVolumeosgWidget#osgUIosgQt
)
if(OpenSceneGraph_FOUND)#message(STATUS "Found osg lib: ${OPENSCENEGRAPH_LIBRARIES}")#message(OSGDB_FOUND=${OSGDB_FOUND}, ${OSGDB_INCLUDE_DIR}, ${OSGDB_LIBRARY})#message(OSGGA_FOUND=${OSGGA_FOUND}, ${OSGGA_INCLUDE_DIR}, ${OSGDA_LIBRARY})#message(OSGQT_FOUND=${OSGQT_FOUND}, ${OSGQT_INCLUDE_DIR}, ${OSGQT_LIBRARY})message(OPENSCENEGRAPH_FOUND=${OPENSCENEGRAPH_FOUND}, ${OPENSCENEGRAPH_INCLUDE_DIR}, ${OPENSCENEGRAPH_LIBRARIES})
else()message(FATAL_ERROR "osg not found!")
endif()

为了保证这个头文件#include <osgQOpenGL/osgQOpenGLWidget> 能正常,还得在cmake中重新包含一下,不知道为什么???

2.重新将vcpkg的头文件在设置一遍

#获取vcpkg的路径
set(VCPKG_PATH1 "$ENV{VCPKG_PATH}/installed/x64-windows/include") #设置使用vcpkg的路径include_directories(${VCPKG_PATH1})

3.链接lib库

target_link_libraries(${DemoName} PRIVATE${OPENSCENEGRAPH_LIBRARIES} 
)

4.添加osg插件到对应exe同路径下(没有插件dll,osgDB::readNodeFile指令读取文件时就会为NULL了,却不报缺少的dll插件,通过调试源码发现(这也是为什么在vcpkg中的bebug文件中的pdb文件不要轻易删掉,在需要调试源码时,这个就派上用场了),底层依赖插件的dll.也可以直接将整个osgPlugins-3.6.5自己手动复制过去,或者将该路径设置到系统环境变量中,这也是有些文章提到的设置方法.根本的东西就是整个插件dll要在正确的位置)

qt的插件的模块vcpkg会自动根据cmake配置来加载进去,osg的好像得手动添加入.

#将osg的插件文件复制到对应的调试文件夹中
#根据对应lib文件的路径.同路径下的plugins文件中的osgPlugins-3.6.5文件夹中的dll文件都复制过去# 判断生成的是debug还是release版本,根据 CMAKE_BUILD_TYPE 选择库if(${CMAKE_BUILD_TYPE}  STREQUAL "Debug")set(OSG_PLUGINS_DIR "$ENV{VCPKG_PATH}/installed/x64-windows/debug/plugins/osgPlugins-3.6.5")
elseif(${CMAKE_BUILD_TYPE}  STREQUAL "Release")set(OSG_PLUGINS_DIR "$ENV{VCPKG_PATH}/installed/x64-windows/plugins/osgPlugins-3.6.5")
else()message(FATAL_ERROR "Unknown build type: ${CMAKE_BUILD_TYPE}")
endif()#遍历osg插件文件夹中的dll
# 遍历DLL文件
file(GLOB_RECURSE OSG_PLUGIN_FILES"${OSG_PLUGINS_DIR}/*.dll"
)#创建osgPlugins-3.6.5文件夹
add_custom_command(TARGET ${DemoName} POST_BUILDCOMMAND ${CMAKE_COMMAND} -E make_directory "$<TARGET_FILE_DIR:${DemoName}>/osgPlugins-3.6.5"COMMENT "creat file: $<TARGET_FILE_DIR:${DemoName}>/osgPlugins-3.6.5"
)# 复制到对应文件夹中
foreach(OSG_PLUGIN_FILE IN LISTS OSG_PLUGIN_FILES)add_custom_command(TARGET ${DemoName} POST_BUILDCOMMAND ${CMAKE_COMMAND} -E copy"${OSG_PLUGIN_FILE}""$<TARGET_FILE_DIR:${DemoName}>/osgPlugins-3.6.5"COMMENT "Copying ${OSG_PLUGIN_FILES} to $<TARGET_FILE_DIR:${DemoName}>/osgPlugins-3.6.5")
endforeach()

5.将osgQt的查找模块文件改为osgQOpenGL

在osg3.6.5中,osgQt已经分离为单独的子项目,其146版本使用了QOpenGL,其使用的头文件与生成的库与旧版osgQt相比,都发生了变化。需要对findosgqt.cmake文件进行修改,才能正常使用find_package(osgQt)或find_package(OpenSceneGraph 3.6.5 REQUIRE osgQt)。

参考文章:
使用CMake查找osgQt_qt项目cmakelist怎么找osg库-CSDN博客

C:\Program Files\CMake\share\cmake-4.0\Modules中找到FindosgQt.cmake ,根据cmake版本来查找

``OSGQT_LIBRARY_DEBUG``The osgQt debug library``$OSGDIR`` is an environment variable that would correspond to::./configure --prefix=$OSGDIRused in building osg.Created by Eric Wing.  Modified to work with osgQt by Robert Osfield,
January 2012.
#]=======================================================================]# Header files are presumed to be included like
# #include <osg/PositionAttitudeTransform>
# #include <osgQt/GraphicsWindowQt>include(${CMAKE_CURRENT_LIST_DIR}/Findosg_functions.cmake)
#OSG_FIND_PATH   (OSGQT osgQt/GraphicsWindowQt)
#OSG_FIND_LIBRARY(OSGQT osgQt)
#20250914
OSG_FIND_PATH   (OSGQT osgQOpenGL/osgQOpenGLWidget)
OSG_FIND_LIBRARY(OSGQT osgQOpenGL)include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(osgQt DEFAULT_MSGOSGQT_LIBRARY OSGQT_INCLUDE_DIR)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/97873.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/97873.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

洛谷 P2245 星际导航(kruskal 重构树 + 倍增优化求路径最大边权)

题目链接 题目难度 洛谷上是蓝题&#xff0c;我觉得这道题挺简单的&#xff0c;一眼就看穿了&#xff0c;应该是绿题。 题目解法概括 kruskal 重构树 倍增优化求路径最大边权。 代码 #include <iostream> #include <vector> #include <algorithm> #in…

STM32H743-ARM例程1-IDE环境搭建与调试下载

目录实验平台环境搭建一、Keil MDK集成开发环境1.MDK简介2.MDK5安装3.程序下载与调试二、STM32CubeMX1.STM32CubeMX简介2.JAVA JRE安装3.STM32CubeMX安装4.STM32CubeH7库安装实验平台 硬件&#xff1a;银杏科技GT7000双核心开发板-ARM-STM32H743XIH6&#xff0c;银杏科技iTool…

FPGA学习篇——Verilog学习MUX的实现

PS&#xff1a;目前手上仍然没有板子&#xff0c;按照野火视频的讲解&#xff0c;目前我们只能做到前面六步&#xff08;其实第一步设计规划也是需要看板子的硬件的&#xff0c;但是现在没有板子就完全与野火传授的板子一致来看&#xff09; 首先我们以最简单的2路选择器MUX2_1…

OpenStack 学习笔记

OpenStack 1. 什么是 OpenStack 1.1 OpenStack 发展史 2006 年亚马逊推出 AWS&#xff0c;正式开启云计算的新纪元 2010 年 7 月美国国家航空航天局&#xff08;NASA&#xff09;与 Rackspace 合作&#xff0c;共同宣布 OpenStack 开放源码计划&#xff0c;由此开启了属于 Open…

mysql小数取整

1 向下取整 SELECT FLOOR(123.456); -- 结果: 1232 向上取整 SELECT CEIL(123.001); -- 结果: 1243 四舍五入 SELECT ROUND(123.456); -- 结果: 123 SELECT ROUND(123.556); -- 结果: 1244 截断&#xff08;不四舍五入&#xff0c;直接截断小数位&#xff09; SELECT …

Day43 PHP(mysql不同注入类型、mysql不同注入点、mysql传输不同数据类型 )

一、不同注入类型实际&#xff1a;我们未知sql是哪种类型&#xff0c;只能靠试/使用sql工具原理&#xff1a;闭合程序员写的sql语句&#xff0c;并且执行我们所需要的sql语句&#xff0c;最后将闭合后多余的 用-- 或者#注释掉。 总结一下就是先闭合&#xff0c;后注释。共四种…

Linux应用开发(君正T23):三网智能切换及配网功能

前段时间接手了一个监控项目&#xff0c;其中甲方对于设备的要求有一条就是实现网口eth、WiFi、4G三种手段的联网方式并且当某一个网络不好的时候就去切换到下一个能用的网络&#xff0c;让监控设备持续不断的有网络&#xff0c;保证监控数据的上传。这个部分的功能就交由我来实…

IvorySQL 4.6:DocumentDB+FerretDB 实现 MongoDB 兼容部署指南

背景 MongoDB 诞生之初&#xff0c;便以出色的易用性与详尽的驱动程序文档脱颖而出&#xff0c;堪称对传统关系型数据库的一次重要革新&#xff0c;也正因如此&#xff0c;它迅速成为开发者社区的热门之选。 然而&#xff0c;随着其许可模式从开源转向 SSPL 许可证&#xff0…

论文阅读:arixv 2025 One Token to Fool LLM-as-a-Judge

总目录 大模型相关研究&#xff1a;https://blog.csdn.net/WhiffeYF/article/details/142132328 https://arxiv.org/pdf/2507.08794 https://www.doubao.com/chat/20698287584991234 速览 这篇文档主要讲了一个关于“大语言模型当裁判”的重要发现——很多我们以为靠谱的AI裁…

webrtc弱网-AlrDetector类源码分析与算法原理

AlrDetector&#xff08;应用受限区域检测器&#xff09;是WebRTC中用于检测发送端是否处于应用层限速状态的核心组件。它通过维护一个基于时间间隔的预算系统&#xff0c;监控实际发送数据量与网络容量之间的关系。当发送速率持续低于网络容量的设定比例&#xff08;如65%&…

ABP + Verify(快照) 驱动的 PDF/Excel 导出回归

ABP + Verify(快照) 驱动的 PDF/Excel 导出回归 🚀 📚 目录 ABP + Verify(快照) 驱动的 PDF/Excel 导出回归 🚀 0) TL;DR ✨ 1) 背景与目标 🎯 2) 架构与职责(解耦渲染器) 🧩 3) “确定性”前置条件(去伪差异) 🔒 4) PDF 回归策略(以 QuestPDF 为例) 📄 4.…

SIFT特征匹配实战:KNN算法实现指纹认证

这个利用了前面学到的SIFT特征检测来实现的&#xff0c;然后这里主要就是引入了一个新的匹配器。这里匹配是用KNN算法进行匹配的。下面来看下细节。介绍函数由于要频繁展示&#xff0c;所以这里定义了一个函数。def cv_show(name, img):cv2.imshow(name, img)cv2.waitKey(0)导入…

网络安全渗透测试第一步信息收集

信息收集是渗透测试中最基础且关键的一步&#xff0c;它直接影响后续漏洞发现和利用的成功率。本文将系统介绍信息收集的常用方法、工具和技巧&#xff0c;帮助你在实战中高效定位目标弱点。 一、搜索引擎利用 1. Google Hacking 通过Google搜索语法快速定位敏感信息、后台地…

C++——类和对象1

1.类的定义1.1 类定义格式class为定义类的关键字&#xff0c;Stack为类的名字&#xff0c;{ }中的内容是类的主题为了&#xff0c;注意类定义结束时后面的分号不能省略。类体中的内容称为类的成员&#xff1a;类中的变量称为类的属性或成员变量&#xff1b;类中的函数称为类的方…

动手学Agent:Agent设计模式——构建有效Agent的7种模型

Agent本身的定义也不是绝对的&#xff0c;从LLM到最高等级的Agent&#xff0c;中间是有大量灰度地带的&#xff0c;在Anthropic看来&#xff0c;Agent可以以多种方式定义&#xff0c;有些人将完全自主系统定义为Agent&#xff0c;而另一些团队则将预定义的工作流程定义为Agent。…

Windows 下 .venv 激活脚本深度定制:同时注入 PyTorch 调试日志与国内网络加速通道——从“能跑”到“好调”的完整工程化方案

Windows 下 .venv 激活脚本深度定制&#xff1a;同时注入 PyTorch 调试日志与国内网络加速通道 ——从“能跑”到“好调”的完整工程化方案 一、为什么非得改激活脚本&#xff1f; 重复劳动最耗时 每次打开终端都要敲四五行 set/export&#xff0c;人脑就是不可靠的剪贴板。 环…

[BX]和loop指令,debug和masm汇编编译器对指令的不同处理,循环,大小寄存器的包含关系,操作数据长度与寄存器的关系,段前缀

[bx]是什么[bx]这个表达方式和[0]很像&#xff0c;他们俩的功能也很像。之前就提到了&#xff0c;[0]表示一个内存单元&#xff0c;他的偏移地址是0。从这边我们可以引出内存单元的定义&#xff1a;要有内存单元的地址&#xff0c;要有内存单元的长度&#xff08;类型&#xff…

域格YM310 X09移芯CAT1模组HTTPS连接服务器

HTTPS连接服务器 本文档介绍了HTTPS连接服务器的大致流程&#xff0c;测试服务器为httpbin.org。 HTTPS连接服务器流程 创建证书文件 创建一个文件 ATFSCREATE<filename>参数&#xff1a;<filename> 文件名 写入CA证书 ATFSWRITE<filename>,<mode&…

【ManiSkill】常见envs学习笔记

1. StackCube-v1 用于模拟机器人在桌面场景中将红色立方体&#xff08;cubeA&#xff09;堆叠到绿色立方体&#xff08;cubeB&#xff09;上的操作。该任务强调精确抓取、放置和稳定性控制。成功条件包括红色立方体稳定堆叠在绿色立方体上且不被机器人抓取。 参数 (Arguments…

Java 网络编程全解析

前言&#xff1a;网络编程的意义与价值 前言&#xff1a;网络编程的意义与价值 在当今互联网时代&#xff0c;网络编程是软件开发的核心技能之一。无论是桌面应用、移动应用还是企业级系统&#xff0c;几乎都需要与网络交互。Java 作为一门跨平台的编程语言&#xff0c;提供了完…