• OSG开发-使用VisualStudio2019创建CMake项目方式开发HelloOSG


    本文保证你使用VS2019,可以把这个OSG程序开发出来,看到那个蓝色的带有纹理的地球。

    大概步骤如下:

    • 下载已经编译好的OSG的库和头文件
    • 新建一个CMake项目
    • 编辑make.txt
    • 编写main.cpp
    • 运行。

     下载已经编译好的OSG的库和头文件

    由于我们需要用OSG的库来做开发,当然就需要下载人家的库了。去

    OpenSceneGraph | Objexx Engineering,下载,我下载的是和VS2019配套的那个,下载后解压到E盘,OSG目录下,形成如下目录就ok。

     然后可以把这个bin目录放入系统环境变量path中,如图:

     

    path的值中添加;E:\OSG\OpenSceneGraph-3.6.5-VC2019-64-Debug\bin,别忘记这个分号

    这样这个目录下面的N多DLL文件就可以被找到了。有这么多DLL文件呢。

     比较重要的就是这个osgd.dll,如果不设置环境变量,就会提示找不到这个osgd.dll的错误。

    新建一个CMake项目

    打开VS2019,新建项目,选择CMake项目,起个名字,本文名字是:CMakeProject_FirstOSG

     

    创建这个项目成功后,项目目录如下:

     注意观察会发现有两个CMakeLists.txt文件,一个是总体的,一个是项目CMakeProject_FirstOSG

    项目目录下面的。我们主要是修改这个项目CMakeProject_FirstOSG项目目录下面的CMakeLists.txt文件,总体的我们不需要管。不过可以把总体的makefile内容放在这里看一下:

    1. # CMakeList.txt: 顶层 CMake 项目文件,在此处执行全局配置
    2. # 并包含子项目。
    3. #
    4. cmake_minimum_required (VERSION 3.8)
    5. project ("CMakeProject_FirstOSG")
    6. # 包含子项目。
    7. add_subdirectory ("CMakeProject_FirstOSG")

    这个就是做一些全局的配置,添加个子目录,不去修改它。

    编辑make.txt

    引入osg库,首先要告诉编译器库头文件的位置。在CMake中使用include_directories()指令实现。

    include_directories()指令告诉编译器搜索头文件的路径。

    我们还要告诉编译器库文件的位置。在CMake中使用link_directories()指令实现,link_directories()指令告诉链接器器搜索库文件的路径。

    接下来我们还要告诉编译器,具体链接哪个库文件。在CMake中使用target_link_libraries()指令实现。target_link_libraries()指令指定哪些库需要链接到目标上。

    总之最后这个makefile的内容如下:

    1. # CMakeList.txt: CMakeProject_FirstOSG 的 CMake 项目,在此处包括源代码并定义
    2. # 项目特定的逻辑。
    3. #
    4. cmake_minimum_required (VERSION 3.8)
    5. #设定环境变量:OSG_DIR
    6. set(OSG_DIR "E:/osg/OpenSceneGraph-3.6.5-VC2019-64-Debug")
    7. #包含文件的目录是:OSG_DIR 下面的include目录
    8. include_directories(${OSG_DIR}/include)
    9. #需要链接的库文件所在目录为:OSG_DIR下面的lib
    10. link_directories(${OSG_DIR}/lib)
    11. # 将源代码添加到此项目的可执行文件。(下面的语句是VS自动生成的:CMakeProject_FirstOSG是exe文件的名字,后面是所有源文件的名字)
    12. add_executable (CMakeProject_FirstOSG "CMakeProject_FirstOSG.cpp" "CMakeProject_FirstOSG.h")
    13. # TODO: 如有需要,请添加测试并安装目标
    14. target_link_libraries(CMakeProject_FirstOSG osgd osgViewerd osgDBd)

    注意:以上makefile里面的内容是有顺序的,顺序不对,会提示出错,也会提示让你选择启动项。出现这个说明add_executable()前面有一些内容设置的不对,该把 add_executable()放在靠前的位置。总之,就用我这个例子文件,不要修改语句的顺序。

    修改main()函数

    修改这个主函数,添加视图,添加地球,给地球设置纹理。纹理文件可以去这里下载:

    链接: https://pan.baidu.com/s/1vXi5bqBiEjZfmtbnrJH8Mw 提取码: 1234 

    mai()函数内容如下:

    1. // CMakeProject_FirstOSG.cpp: 定义应用程序的入口点。
    2. //
    3. #include //添加Viewer使用
    4. #include //添加球使用
    5. #include //添加球使用
    6. #include //纹理程序段使用
    7. #include //纹理程序段使用
    8. #include "CMakeProject_FirstOSG.h"
    9. using namespace std;
    10. int main()
    11. {
    12. cout << "Hello CMake.———〉〉〉〉OSG" << endl;
    13. //*****我是华丽的程序分割线******开始******我添加了一个viewer//
    14. osg::ref_ptr viewer = new osgViewer::Viewer;
    15. viewer->setUpViewInWindow(50, 50, 800, 600);
    16. //*****我是华丽的程序分割线******结束******我添加了一个viewer//
    17. //*****我是华丽的程序分割线******开始******我添加了一个球//
    18. osg::ref_ptr geode = new osg::Geode;
    19. geode->addDrawable(new osg::ShapeDrawable(new osg::Sphere(osg::Vec3(), 1.0f)));
    20. viewer->setSceneData(geode);
    21. //*****我是华丽的程序分割线******结束******我添加了一个球//
    22. //*****我是华丽的程序分割线******开始******我为这个球添加了纹理//
    23. osg::ref_ptr texture = new osg::Texture2D(osgDB::readRefImageFile("E:/world.png"));
    24. auto stateSet = geode->getOrCreateStateSet();
    25. stateSet->setTextureAttributeAndModes(0, texture);
    26. //*****我是华丽的程序分割线******结束******我为这个球添加了纹理//
    27. return viewer->run();
    28. //return 0;
    29. }

    各个阶段的图片如下:

    添加了纹理之后,这个球看起来好多了。

     

     有了这个,以后就可以研究点高深的了。

    本文参考了

    Zhihui Tangicon-default.png?t=M85Bhttps://blog.csdn.net/forcsdn_tang 非常感谢!

     

  • 相关阅读:
    Python钢筋混凝土结构计算.pdf-混凝土强度设计值
    Figma 怎么切图?新手入门教程详解
    女性相关新闻易语言代码
    又被夺命连环问了!从一道关于定时任务的面试题说起。
    WPS与Office的恩怨情仇,这6个电脑冷知识,你知道几个?
    Maven - 客户端 Nexus 配置
    前端实现背景模式的切换
    PyTorch注意力机制
    23种设计模式之代理模式(动态代理)
    为什么大家都喜欢使用宝塔面板?
  • 原文地址:https://blog.csdn.net/superfreak/article/details/128207690