同事由于新加了一个屏幕,本来用

osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer();
viewer->setSceneData(groupRoot.get());
return viewer->run();

就直接可以跑全屏的程序了,然是现在会在两块屏出现全屏,他很苦恼。

于是他:

osgViewer::View* createView(int screenNum)
{
unsigned int width = , height = ;
osg::GraphicsContext::WindowingSystemInterface* wsi = osg::GraphicsContext::getWindowingSystemInterface();
if (wsi)
{
wsi->getScreenResolution(osg::GraphicsContext::ScreenIdentifier(screenNum),width,height);
} osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits;
traits->screenNum = screenNum;
traits->x = ;
traits->y = ;
traits->width = width;
traits->height = height;
traits->windowDecoration = false;
traits->doubleBuffer = true;
traits->sharedContext = ;
osg::ref_ptr<osg::GraphicsContext> gc = osg::GraphicsContext::createGraphicsContext(traits.get());
if (!gc) return NULL; osg::ref_ptr<osg::Camera> camera = new osg::Camera;
camera->setGraphicsContext(gc.get());
camera->setViewport(new osg::Viewport(,,width,height));
camera->setProjectionMatrixAsPerspective(30.0f, static_cast<double>(width) / static_cast<double>(height), 1.0f, 10000.0f); GLenum buffer = traits->doubleBuffer ? GL_BACK : GL_FRONT;
camera->setDrawBuffer(buffer);
camera->setReadBuffer(buffer); osg::ref_ptr<osgViewer::View> view = new osgViewer::View;
view->setCamera(camera.get());
view->setCameraManipulator(new osgGA::TrackballManipulator);
return view.release();
}

调用时:

osg::ref_ptr<osgViewer::CompositeViewer> viewer = new osgViewer::CompositeViewer();
osgViewer::View* view = createView();
if (view)
{
view->setSceneData(groupRoot.get()); viewer->addView(view);
}
return viewer->run();

但是遇到问题

他加载了一个使用透明图片的billboard

在之前的代码中显示是透明的,

在用了自己的createView()函数之后,就不透明的。

百思不得其解啊

我看看了,觉得是透明的问题。

给他的

osg::ref_ptr<osg::StateSet> pStateSet = new osg::StateSet();
// 启用混合
pStateSet->setMode(GL_BLEND,osg::StateAttribute::ON); ····
//主要是下面这句
pStateSet->setRenderingHint(osg::StateSet::TRANSPARENT_BIN); pGeometry->setStateSet(pStateSet.get());

设置了TRANSPARENT_BIN就透明了的。

透明的问题解决了。。。

那么新问题来了:

1.为什么用viewer自带的就不需要设置?

2.透明测试和深度测试会有问题(老问题)

那这些以后解决吧

当天又解决了:

// 状态属性对象
osg::ref_ptr<osg::StateSet> pStateSet = new osg::StateSet(); // 创建一个2D属性对象
osg::ref_ptr<osg::Texture2D> pTexture2D = new osg::Texture2D(); // 关联Image对象
pTexture2D->setImage(image.get()); // 关联Texture2D纹理对象
pStateSet->setTextureAttributeAndModes(, pTexture2D,osg::StateAttribute::ON); // 启用混合
pStateSet->setMode(GL_BLEND,osg::StateAttribute::ON); // 关闭光照
pStateSet->setMode(GL_LIGHTING,osg::StateAttribute::OFF); ···················· osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer();
viewer->setSceneData(groupRoot.get());
//其实下面这句话就可以解决我同事多屏幕的问题
viewer->setUpViewOnSingleScreen();
return viewer->run();

[osg][原创]osg多屏幕显示,会出现透明需要设置的问题的更多相关文章

  1. [OSG][转]osg格式文件

    转自:http://blog.csdn.net/timothyfly/article/details/7826139 osg格式文件中如何处理多个节点共享一个子节点 下面一段程序中,共有三个Group ...

  2. [原][osg][QT]osg与QT界面结合的简单例子二

    //main.cpp #include "VREObliqueEditorQTWindow.h" #include <QtWidgets/QApplication> # ...

  3. [转][osg][QT]osg与QT界面结合的简单例子

    //QT += core gui opengl //LIBS += -losgViewer -losgDB -losgUtil -losg -lOpenThreads -losgGA -losgQt ...

  4. [osg][osgearth]osg的分页加载,代码和结构图

    DatabasePager加载数据的过程: 多线程 使用DatabasePager加载数据的流程: 左侧的图框表示数据的检索和输入, 中间的白色框表示用于数据存储的内存空间,而右边的图框表示存储数据的 ...

  5. 兼容性所有浏览器的透明CSS设置

    兼容所有浏览器的透明CSS设置: .transparent_class { filter:alpha(opacity=50); -moz-opacity:0.5; -khtml-opacity: 0. ...

  6. WebView设置透明和设置背景图片的方法

    http://blog.csdn.net/Vincent20111024/article/details/8478219 1. WebView若要设置背景图,直接设置web .setBackgroun ...

  7. [osg][原]osg的坐标系:使用右手法则Y轴向前、X向、右Z向上。camare的默认姿态:向下看(Z轴负向),头向前(Y轴正向)

    参考:http://blog.csdn.net/tmljs1988/article/details/7561887 图中上半边为opengl坐标系,下半边的osg坐标系: osg::Camare的默认 ...

  8. [原][osg][osgEarth]osg::Matrix 父子节点的变化关系

    //osg::Matrix offsetmatrix 计算出子节点在父节点下的绝对坐标 //osg::Matrix offposition 用来计算当前节点相对父节点的位置 osg::Matrix o ...

  9. [原][OSG]深入osg函数----SceneView::cull 函数

    参考:最长一帧 先介绍几个类: osgUtil::CullVisitor:“筛选访问器” 当我们使用它遍历场景图形的各个节点时, CullVisitor 将会对每一个遇到的节点执行场景筛选的工作,判断 ...

随机推荐

  1. Lucene.net之解决锁的问题

    public sealed class SearchIndexManager { private static readonly SearchIndexManager searchManager=ne ...

  2. poj3764 The XOR Longest Path【dfs】【Trie树】

    The xor-longest Path Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10038   Accepted:  ...

  3. MySQL 慢查询日志工具之pt-query-digest

    1. 工具简介 pt-query-digest是用于分析mysql慢查询的一个工具,它可以分析binlog.General log.slowlog,也可以通过SHOWPROCESSLIST或者通过tc ...

  4. 以太坊geth主网全节点部署

    以太坊geth主网全节点部署 #环境 ubuntu 16.4 #硬盘500GB(目前占用200G) #客户端安装 # 查看下载页面最新版 # https://ethereum.github.io/go ...

  5. HTML5-Canvas 图形变换+状态保存

    1. 图形变换 canvas是基于状态绘制图形的.故此一般情况下,canvas的绘制的图形路径和状态时分离的. function drawShape(ctx){ // 绘制路径 shapePath(c ...

  6. python之threading.local

    简述: threading.local是全局变量但是它的值却在当前调用它的线程当中 作用: 在threading module中,有一个非常特别的类local.一旦在主线程实例化了一个local,它会 ...

  7. Laravel 5.* 中路由绑定 Controller 包含子目录写法

    https://blog.csdn.net/maxsky/article/details/54017981 [可以使用命令在项目根目录一键创建 php artisan make:controller ...

  8. mysql++使用

    Mysql++是官方发布的.一个为MySQL设计的C++语言的API.Mysql++为Mysql的C-Api的再次封装,它用STL(Standard Template Language)开发并编写,并 ...

  9. 关于Oracle误操作--数据被Commit后的数据回退恢复(闪回)

    今天操作Oracle数据库时,做一个Update数据时,不小心少写了个where,看这粗心大意的. 于是乎,把所有的员工工号都给更新成一个同一个工号了.这是一个悲催的故事. 因为工号是Check了好多 ...

  10. Arthur and Brackets

    n<605设计出n对夸号  给出n个条件每个条件为[l,r] 表示第i对夸号右夸号离左夸号的距离,然后夸号的右夸号出现的顺序必须按照给的顺序 出现, 那么如果存在就输出否则输出impossilb ...