查看: 1520|回复: 0

osgEarth中Billboard不能始终朝向屏幕的问题

[复制链接]

该用户从未签到

发表于 2015-3-13 13:57:59 | 显示全部楼层 |阅读模式
各位,我在OSGEarth里面用Billboard显示图片,可是图片并不能始终朝向屏幕,有遇到相同问题的吗?

场景节点结构 根节点下包含MapNode和 Billboard节点,也就是Billboard并不在MapNode节点下;

部分代码如下:
                                osg::Billboard * pBillboard = new osg::Billboard();  
                                pBillboard->setNormal(osg::Vec3f(0,0,1));
                                osg::Geometry * pRect = new osg::Geometry;  

                                osg::Vec3Array * pVertArr = new osg::Vec3Array();  
                                pVertArr->push_back(osg::Vec3(-0.5f,-0.5f,0.0f));  
                                pVertArr->push_back(osg::Vec3(0.5f,-0.5f,0.0f));  
                                pVertArr->push_back(osg::Vec3(0.5f,0.5f,0.0f));  
                                pVertArr->push_back(osg::Vec3(-0.5f,0.5f,0.0f));
                                pRect->setVertexArray(pVertArr);  

                                osg::Vec3Array * pNormArr = new osg::Vec3Array();  
                                pNormArr->push_back(osg::Vec3f(0,0,1));
                                pRect->setNormalArray(pNormArr);  
                                pRect->setNormalBinding(osg::Geometry::BIND_OVERALL);  

                                osg::Vec2Array * pCoordArr = new osg::Vec2Array();  
                                pCoordArr->push_back(osg::Vec2(0.0f,0.0f));  
                                pCoordArr->push_back(osg::Vec2(1.0f,0.0f));  
                                pCoordArr->push_back(osg::Vec2(1.0f,1.0f));  
                                pCoordArr->push_back(osg::Vec2(0.0f,1.0f));  
                                pRect->setTexCoordArray(0,pCoordArr);

                                pRect->addPrimitiveSet(new osg:rawArrays(GL_QUADS,0,4));  
                                pBillboard->addDrawable(pRect);

                                osg::Texture2D * pTex2d = new osg::Texture2D;
                                pTex2d->setFilter(osg::Texture::MIN_FILTER,osg::Texture::NEAREST);
                                pTex2d->setFilter(osg::Texture::MAG_FILTER,osg::Texture::NEAREST);
                                pTex2d->setWrap(osg::Texture::WRAP_S,osg::Texture::CLAMP_TO_BORDER);
                                pTex2d->setWrap(osg::Texture::WRAP_T,osg::Texture::CLAMP_TO_BORDER);
                                //pTex2d->setBorderColor(osg::Vec4f(0.6f,0.6f,0.6f,1));
                                //pTex2d->setBorderWidth(2);
                                pTex2d->setResizeNonPowerOfTwoHint(false);
                                pTex2d->setImage(m_pTexImage);

                                pBillboard->getOrCreateStateSet()->setTextureAttributeAndModes(0,pTex2d);
                                pBillboard->getOrCreateStateSet()->setTextureAttribute(0,new osg::TexEnv(osg::TexEnv::REPLACE));
                                pBillboard->getOrCreateStateSet()->setMode(GL_LIGHTING,osg::StateAttribute::OFF);

                                m_pTexMatrix = new osg::TexMat();
                                m_pTexMatrix->setMatrix(osg::Matrixd::identity());
                                pBillboard->getOrCreateStateSet()->setTextureAttributeAndModes(0,m_pTexMatrix);
                                pBillboard->setMode(osg::Billboard:OINT_ROT_EYE);
                                return pBillboard;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表