[osg][原创]osg多屏幕显示,会出现透明需要设置的问题
同事由于新加了一个屏幕,本来用
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多屏幕显示,会出现透明需要设置的问题的更多相关文章
- [OSG][转]osg格式文件
转自:http://blog.csdn.net/timothyfly/article/details/7826139 osg格式文件中如何处理多个节点共享一个子节点 下面一段程序中,共有三个Group ...
- [原][osg][QT]osg与QT界面结合的简单例子二
//main.cpp #include "VREObliqueEditorQTWindow.h" #include <QtWidgets/QApplication> # ...
- [转][osg][QT]osg与QT界面结合的简单例子
//QT += core gui opengl //LIBS += -losgViewer -losgDB -losgUtil -losg -lOpenThreads -losgGA -losgQt ...
- [osg][osgearth]osg的分页加载,代码和结构图
DatabasePager加载数据的过程: 多线程 使用DatabasePager加载数据的流程: 左侧的图框表示数据的检索和输入, 中间的白色框表示用于数据存储的内存空间,而右边的图框表示存储数据的 ...
- 兼容性所有浏览器的透明CSS设置
兼容所有浏览器的透明CSS设置: .transparent_class { filter:alpha(opacity=50); -moz-opacity:0.5; -khtml-opacity: 0. ...
- WebView设置透明和设置背景图片的方法
http://blog.csdn.net/Vincent20111024/article/details/8478219 1. WebView若要设置背景图,直接设置web .setBackgroun ...
- [osg][原]osg的坐标系:使用右手法则Y轴向前、X向、右Z向上。camare的默认姿态:向下看(Z轴负向),头向前(Y轴正向)
参考:http://blog.csdn.net/tmljs1988/article/details/7561887 图中上半边为opengl坐标系,下半边的osg坐标系: osg::Camare的默认 ...
- [原][osg][osgEarth]osg::Matrix 父子节点的变化关系
//osg::Matrix offsetmatrix 计算出子节点在父节点下的绝对坐标 //osg::Matrix offposition 用来计算当前节点相对父节点的位置 osg::Matrix o ...
- [原][OSG]深入osg函数----SceneView::cull 函数
参考:最长一帧 先介绍几个类: osgUtil::CullVisitor:“筛选访问器” 当我们使用它遍历场景图形的各个节点时, CullVisitor 将会对每一个遇到的节点执行场景筛选的工作,判断 ...
随机推荐
- 边的双联通+缩点+LCA(HDU3686)
Traffic Real Time Query System Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- 前端模拟(mock)接口数据(koa)
在前后端分离开发项目时,经常会有前后端进度不一致,可能前端界面开发已经完成,就等接口了,如果等接口出来再联调的话时间可能会来不及. 这个时候,前端就可以根据制定好的接口规范和接口文档来mock接口数据 ...
- 记录用户操作历史命令history
我们知道可以使用history命令,查看自己的操作记录,但如果你是root用户,如何查看其它用户的操作记录呢? 其实history命令只是把当前用户目录下的~/.bash_History文件内容列 ...
- 阿里云服务器被挖矿程序minerd入侵的终极解决办法[转载]
突然发现阿里云服务器CPU很高,几乎达到100%,执行 top c 一看,吓一跳,结果如下: root 386m S : /tmp/AnXqV -B -a cryptonight -o stratum ...
- mysql-sql高级应用
sql语言进阶 典型操作 order by - select * from play_list order by createtime; - select * from play_list order ...
- T-SQL备份数据库恢复
注:此操作在master数据库上执行 /*1.--得到数据库的文件目录 @dbname 指定要取得目录的数据库名 如果指定的数据不存在,返回安装SQL时设置的默认数据目录 如果指定NULL,则返回默认 ...
- SQL Server使用 LEFT JOIN ON LIKE进行数据关联查询
这是来新公司写的第一篇文章,使用LEFT JOIN ON LIKE处理一下这种问题: SQL视图代码如下: CREATE View [dbo].[VI_SearchCN] AS --搜索产品的文件 ( ...
- Mongo Rocks 在SSD盘上表现优秀,专门为SSD盘的优化
2017 · MongoDB深圳用户组大会全记录 | MongoDB中文社区http://www.mongoing.com/2017/04/24/mongodb-shenzhen-user-group ...
- python基础之递归、二分法
一 递归 1. 必须有一个明确的结束条件2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结 ...
- centos shell编程4【分发系统】 服务器标准化 mkpasswd 生成密码的工具 expect讲解 expect传递参数 expect自动同步文件 expect指定host和要同步的文件 expect文件分发系统 expect自动发送密钥脚本 Linux脚本执行方式 第三十八节课
centos shell编程4[分发系统] 服务器标准化 mkpasswd 生成密码的工具 expect讲解 expect传递参数 expect自动同步文件 expect指定host和要 ...