OSG 编译安装 && 使用
OSG 编译安装 && 使用
1. OSG 编译安装
//安装依赖 sudo apt-get install cmake libgdal-dev libfreetype6-dev zlib1g-dev liblua5.3-dev libcppunit-dev libpng-dev libjpeg-dev libxmu-dev libxmuu-dev libxi-dev //拉取代码 git clone https://github.com/openscenegraph/osg.git //构建 mkdir build && cd build cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local make && make install
2. 测试使用
#include <osgViewer/Viewer> #include <osgViewer/ViewerEventHandlers> #include <osg/Node> #include <osg/Geode> #include <osg/Geometry> #include <osgDB/ReaderWriter> #include <osgDB/ReadFile> #include <osgDB/WriteFile> #include <osgGA/StateSetManipulator> #include <osgUtil/Optimizer> #include <osgUtil/DelaunayTriangulator> // #include <pcl/io/ply_io.h> // #include <pcl/point_types.h> #include <iostream> #include "cloud_obstacle_analysis.h" int main() { osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer(); viewer->addEventHandler(new osgGA::StateSetManipulator(viewer->getCamera()->getOrCreateStateSet())); osg::ref_ptr<osg::Group> root = new osg::Group(); // 创建顶点数组 osg::ref_ptr<osg::Vec3Array> coords = new osg::Vec3Array(); osg::ref_ptr<osg::Vec4Array> color = new osg::Vec4Array(); std::string filename; std::vector<obs::MCloud> out_soucre_cloud; std::vector<obs::MCloud> out_obs_cloud; obs::CloudObstacleAnalysis::readStream(filename, out_soucre_cloud, out_obs_cloud); // pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>) ; // if (pcl::io::loadPLYFile("3-1-2.ply" , *cloud) == -1) // { // std::cout<<"读取点云失败!\n" ; // return -1 ; // } int frame_nums = out_soucre_cloud.size(); std::cout << "点云数据:" << frame_nums << std::endl; int k = 0; for (int j = 0; j < frame_nums; ++j) { for (int i = 0; i < out_soucre_cloud[j].size(); ++i) { coords->push_back(osg::Vec3( out_soucre_cloud[j][i].x(), out_soucre_cloud[j][i].y(), out_soucre_cloud[j][i].z())); color->push_back(osg::Vec4(1.0f, 0.0f, 0.0f, 0.3f)); k++; } } // 创建几何体 osg::ref_ptr<osg::Geometry> geometry = new osg::Geometry(); // 设置顶点数组 geometry->setVertexArray(coords.get()); geometry->setColorArray(color.get()); geometry->setColorBinding(osg::Geometry::BIND_PER_VERTEX); osg::Vec3Array *normals = new osg::Vec3Array; normals->push_back(osg::Vec3(0.0f, 1.0f, 0.0f)); geometry->setNormalArray(normals); geometry->setNormalBinding(osg::Geometry::BIND_OVERALL); geometry->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::POINTS, 0, k)); // 设置关联方式 // 添加到叶节点 osg::ref_ptr<osg::Geode> geode = new osg::Geode(); geode->addDrawable(geometry.get()); root->addChild(geode.get()); // 优化场景数据 osgUtil::Optimizer optimizer; optimizer.optimize(root.get()); viewer->setSceneData(root.get()); viewer->realize(); viewer->run(); return 0; }
cmake
cmake_minimum_required( VERSION 2.8 )
project(test_pro)
# 添加c++ 11标准支持
set(CMAKE_CXX_FLAGS "-std=c++11" )
# 寻找OpenCV库
find_package(OpenCV 3.2 REQUIRED)
if(NOT OpenCV_FOUND)
message(FATAL_ERROR "OpenCV 3.2 not found.")
endif()
find_package(Eigen3 REQUIRED)
find_package(OpenSceneGraph COMPONENTS
osg
osgViewer
OpenThreads
osgAnimation
osgGA
osgDB
osgManipulator
osgParticle
osgText
osgUtil
osgWidget
osgShadow)
# 添加头文件
# include_directories(${OpenCV_INCLUDE_DIRS} )
# Source file
file(GLOB header_list
${CMAKE_CURRENT_SOURCE_DIR}/*.h)
file(GLOB source_list
${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
add_executable(${PROJECT_NAME} ${header_list} ${source_list})
target_include_directories(${PROJECT_NAME} PUBLIC
${EIGEN3_INCLUDE_DIRS}
${OpenCV_INCLUDE_DIRS}
${OPENSCENEGRAPH_INCLUDE_DIRS})
# message(" opencv include " ${OpenCV_INCLUDE_DIRS})
# 链接OpenCV库
target_link_libraries(${PROJECT_NAME} PUBLIC
pthread
${OpenCV_LIBRARIES}
${OPENSCENEGRAPH_LIBRARIES})
# message(" opencv lib " ${OpenCV_LIBRARIES})