osg源码vs编译
‘壹’ osg第一次编译时用的vs2008,现在我需要用QT开发,还要重新编译osg吗
1, 在C:\OSG\OpenSceneGraph下新建两个文件夹,分别命名为build, bin,用于放置编译文件
2, 解压cmake-2.6.4,打开bin/CMakeSetup.exe,将C:\OSG\OpenSceneGraph下的CMakeLists.txt拖到界面上,
3, 设置where is the source code 为:C:\OSG\OpenSceneGraph
和where to build thebinnaries.为:C:\OSG\OpenSceneGraph\build
4, 设置相关的cache value参数,这里主要设置的参数包括:
ACTUAL_3RDPARTY_DIR,:设置为前面的C:\OSG\3rdParty
BUILD_OSG_EXAMPLES :ON,即编译实例
CMAKE_INSTALL_PREFIX:C:/OSG/OpenSceneGraph/bin ,设置编译成功后,相关的库文件存放的地址,切勿忘记
5, 点击configure按钮,进行第一次配置
6, 第一次配置完成后,将右上角的show advanced values 复选框选择上,将mfc example 设置为on
7, 点击configure按钮进行第二次配置,ok按钮变为可用,就可点击ok按钮开始生成
‘贰’ 求助一下,关于OSG编译的问题,cmake下就是没有ACTUAL_3DPARTY_DIR这一项,编译卡在这进行不下去了!!!
ACTUAL_3DPARTY_DIR,这个的意思是第三方文件所在目录,你把3rdParty下载下来,然后放在你电脑的任意盘位,比如C:/Programs/OSG/3rdParty。在cmake下ACTUAL_3DPARTY_DIR,把那个路径加上来就行了。我验证了下,是会有ACTUAL_3DPARTY_DIR这一项的,如果没有,是不是你没有下载3rdParty第三方文件啊。或者是你加入的CMakeLists.txt这一项应该是OpenSceneGraph-3.0.0中的CMakeLists.txt,而不是OpenSceneGraph-3.0.0\applications中的CMakeLists.txt,你再试试,如果还不行,再追问,希望最终能帮你解决问题。
‘叁’ initqtwindowingsystem;中不能使用osgtext吗
注意:
1.编译osg源码时,勾选osgQT 相关模块,这是对QT的支持
2.在QtPro文件中添加对应的库和目录
例如:
win32:INCLUDEPATH += C:/OpenSceneGraph/include
win32:DEPENDPATH += C:/OpenSceneGraph/include
unix:!macx:INCLUDEPATH += .
win32:CONFIG(release, debug|release): LIBS +=
-LC:/OpenSceneGraph/lib/ -lOpenThreads
-LC:/OpenSceneGraph/lib/ -losg
-LC:/OpenSceneGraph/lib/ -losgAnimation
-LC:/OpenSceneGraph/lib/ -losgDB
-LC:/OpenSceneGraph/lib/ -losgFX
-LC:/OpenSceneGraph/lib/ -losgGA
-LC:/OpenSceneGraph/lib/ -losgManipulator
-LC:/OpenSceneGraph/lib/ -losgParticle
-LC:/OpenSceneGraph/lib/ -losgPresentation
-LC:/OpenSceneGraph/lib/ -losgQt
3. 编写CPP文件。
#include <QApplication>
#include <osgViewer/Viewer>
#include <osgGA/TrackballManipulator>
#include <osgQt/GraphicsWindowQt>
#include <osg/ShapeDrawable>
#include <osg/MatrixTransform>
#include <osgManipulator/TabBoxDragger>
#include <osgGA/StateSetManipulator>
#include <osgViewer/ViewerEventHandlers>
#include <osgDB/ReadFile>
#include <osg/Material>
#include <osg/Texture2D>
#include <osg/Vec3>
#include <osg/Vec4>
#include <osg/ShapeDrawable>
osg::ref_ptr<osg::Geode> CreateBox() {
osg::ref_ptr<osg::Geode> geode= new osg::Geode;
osg::ref_ptr<osg::TessellationHints> hints= new osg::TessellationHints;
osg::ref_ptr<osg::ShapeDrawable> shape= new osg::ShapeDrawable(new osg::Sphere(osg::Vec3(5.0,5.0,5.0),10.0));
osg::ref_ptr<osg::Material> material= new osg::Material;
osg::ref_ptr<osg::Texture2D> texture= new osg::Texture2D;
osg::ref_ptr<osg::Image> image= new osg::Image;
hints->setDetailRatio(0.5);
//设置颜色
shape->setColor(osg::Vec4(0.1,0.5,0.5,0.5));
//设置材质
material->setAmbient(osg::Material::FRONT_AND_BACK,osg::Vec4(0.5,0.5,0.5,0.5));
material->setDiffuse(osg::Material::FRONT_AND_BACK,osg::Vec4(0.5,0.5,0.5,0.5));
material->setSpecular(osg::Material::FRONT_AND_BACK,osg::Vec4(0.5,0.5,0.5,0.5));
material->setShininess(osg::Material::FRONT_AND_BACK,0.6);
shape->getOrCreateStateSet()->setAttributeAndModes(material.get(),osg::StateAttribute::ON);
//设置纹理
image= osgDB::readImageFile("Images/land_shallow_topo_2048.jpg");
if(image->valid())
texture->setImage(image);
shape->getOrCreateStateSet()->setTextureAttributeAndModes(0,texture.get(),osg::StateAttribute::ON);
geode->addDrawable(shape);
return geode;
}
int main( int argc, char** argv )
{
QApplication app(argc, argv);
osgQt::initQtWindowingSystem();
osg::Group* sceneroot = new osg::Group;
sceneroot->addChild(CreateBox());
osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer;
viewer->addEventHandler(new osgViewer::StatsHandler);
viewer->setSceneData( sceneroot );
viewer->setCameraManipulator( new osgGA::TrackballManipulator );
osgQt::setViewer( viewer.get() );
osgQt::GLWidget* glw = new osgQt::GLWidget;
osgQt::GraphicsWindowQt* graphicswin = new osgQt::GraphicsWindowQt(glw);
viewer->getCamera()->setViewport( new osg::Viewport(0, 0, glw->width(), glw->height() ) );
viewer->getCamera()->setGraphicsContext( graphicswin );
glw->show();
return app.exec();
}
4.效果图如下:
‘肆’ 现在学习OSG,但编译过程中遇到了一些问题,哪位同学给解释一下 以及解决办法
1、UNICODE是全球统一宽字符集,说明你的代码中有不规范的字符,比如某些汉字标点、特殊字符;
2、未知
3、可能是库文件路径没有包含或位置不正确
‘伍’ OSG+VS2013运行例程,编译不通过。出现如下错误:
if rv is not None and rsv is not None:
# extract version/subversion
self._nmap_version_number = int(line[rv.start():rv.end()])
self._nmap_subversion_number = int(line[rsv.start()+1:rsv.end()])
break
}
‘陆’ osg+vs2015+win10配置 cmake时选择哪个编译器
解决Win10系统无法安装VS2015的方法教程1、如果你在安装过程中,出现安装失败的问题,不妨重新打开下载的那个安装程序,选择修复; 2、有用户反应在安装前对系统进行了如下设置, 一是,自行安装了运行库——vc++和.NET Framework 二是,卸载了系统内置应用——Groove音乐、电影和电视 所以,准备安装Visual Studio的朋友们注意了,一定不要进行上面这两个操作不然。安装不上的用户建议重新安装Windows10并在第一时间安装Visual Studio 2015。 通过上述方法我们就能够让win10系统更好的兼容VS2015的安装了, 如果在安装VS2015之前,你对系统做了部分修改,导致出现无法安装的问题,那么可将系统还原出厂设置后,再尝试安装该软件!
‘柒’ .osg能在osgviewer中显示,不能在vs中显示
猜测可能是模型位置和相机位置不合适造成,如果代码中用viewer.frame()渲染的话,可以使用viewer.run()试试,这个函数会自动设置相机位置到模型的位置
‘捌’ osgearth 编译是报错 c++
我的也是,同样的软件,别人正常使用,我的就报错,但是现在我把编程的源码写上后先编译stdafx.cpp后在编译就没问题了。 c++6.0与win8.1是不兼容的,你可以下载vs2010
‘玖’ 小白请教osg(OpenSceneGraph)如何安装
一下载资料:
1、下载源码:
在http://www.openscenegraph.org/projects/osg/wiki/Downloads下载稳定版本的源代码或预编译包。
source code为源代码,可以用CMAKE工具生成.sln的解决方案;
binaries为预编译包,预编译包不是openscenegraph官方直接维护,而是有其他爱好者上传,可能会有隐患,最好是从源代码进行编译。
版本说明:<主版本号>.<副版本号>.<修订号>
主版本号高的,功能丰富;副版本号为偶数的为正式版本,比较稳定;副版本号为奇数的为开发者版本,有新特性和功能,但会存在未解决的兼容性和效率问题;开发者版本和正式版本是同步发行的。
下载文件为:OpenSceneGraph-2.8.0.zip
2、下载Cmake工具:
在http://www.cmake.org/cmake/resources/software.html中下载CMake工具cmake-2.8.2-win32-x86.exe。
3、下载SVN软件(用于下载源码或第三方库,有的版本不需要此软件,可直接下,根据情况定):
在http://tortoisesvn.tigris.org/下载TortoiseSVN。
4、下载第三方库Dependencies,http://www.openscenegraph.org/projects/osg/wiki/Downloads/Dependencies,
“VisualStudio 8 (2005) SP1 - svn access directory ”
5、下载示例:
在http://www.openscenegraph.org/projects/osg/wiki/Downloads/SampleDatasets中下载示例数据文件OpenSceneGraph-Data-2.8.0.zip 。
二、安装
1、安装cmake工具
2、在某盘符下建立osg文件夹,在该文件夹中放置源码文件、第三方文件和示例文件。
3、运行cmake,
第一行(where is the source code)输入osg文件夹中的源码文件;
第二行(where to build the binaries)输入一个新文件夹名及地址,如osg/build_osg;
点configure,选择所用的编译器版本,即c++版本;
点grouped,选择build项,选择build_osg_examples和build_osg_wrappers;
选择cmake项,设置cmake_install_prefix的位置(用于存放编译完的各种模块文件,如库文件、可执行文件和头文件)
点configure,点advanced,选上build_mfc_example
点configure,
点generate,完成。
此时在osg/build_osg文件中生成了对应编译版本的.sln文件。
4、用c++编译器打开该.sln文件,在解决方案管理器窗口中的all_build上右击,选“生成”,将在osg/build_osg中生成几个G的文件。
在install上右击,选“生成”,将在第三步中cmake_install_prefix设置的文件夹中生成编译完的各种模块文件(如库文件、可执行文件和头文件)。
三、设置环境变量
我的电脑-属性-高级-环境变量
系统变量
OPENSCENEGRAPH_VERSION=2.8.0
OSGDIR=D:\Program Files\OpenSceneGraph
PATH新增:%OSGDIR%\bin;
%OSGDIR%\bin\osgPlugins-%OPENSCENEGRAPH_VERSION%
OSG_FILE_PATH=%OSGDIR%\data
OSG_NOTIFY_LEVEL=INFO
四、简单测试
在控制台下输入osgviewerd cow.osg
五、建立工程环境
1、使VS支持无扩展名头文件的高亮显示。
进入visual studio,选择Tools-Options,选text editor-file extension,在下面的map extensionless files to选项选择microsoft visual c++。
2、构建基于OSG开发的工程。
1)建一个工程
2)在project-properties中选择configuration properties-c/c++,在additional include directories中输入“$(OSGDIR)\include”。
3)选择configuration properties-linker,在additional library directories中输入“$(OSGDIR)\lib”。
4)选择configuration properties-linker-input,打开additional dependencies窗口,准备配置输入的依赖库文件名称。如OpenThreadsd.lib;osgd.lib;osgDBd.lib;osgUtild.lib;osgGAd.lib;osgTextd.lib;osgViewerd.lib
注意:Debug版本的工程和Release版本的工程所依赖的OSG库文件类型相同,但名称有区别.Debug版本的文件名末尾有"d"标识。根据用户需要的不同,还可以添加其他库依赖文件,这些文件在osg的lib文件夹中。
OK,现在可以编代码,编译、调试,输出效果了,体会OSG渲染引擎的强大吧
‘拾’ osg模型能在osgviewer中显示,不能在vs中显示
cow.osg模型具体放在什么路径下?
工程当前路径下,则可以直接viewer.setSceneData(osgDB::readNodeFile("cow.osg"));
模型文件cow.osg正常放在osg库的data文件夹下