|
楼主 |
发表于 2009-1-5 09:18:21
|
显示全部楼层
相关代码如下,我截取了其中一部分,与其无关的建模省略了,建模是在cad中建模,然后直接读取dwg文件生成的模型
osg::Group* CGeDataBase:sg_root()
{
osg::Group* grp = new osg::Group;
int i;
for(i = 0 ; i < m_Entitys.GetSize();i++)
{
CEntityBase* pEntity = m_Entitys;
osg::ref_ptr<osg::Geode> geod = pEntity->CreateGeode();
geod->setNodeMask(Ge::_CastsShadowTraversalMask | Ge::_ReceivesShadowTraversalMask);
grp->addChild(geod.get());
}
//grp->setNodeMask(Ge::_CastsShadowTraversalMask | Ge::_ReceivesShadowTraversalMask);
osg::ref_ptr<osg::Geode> geodPlane = CreatePlan(p1,p2);
geodPlane->setNodeMask(Ge::_ReceivesShadowTraversalMask);
osgShadow::ShadowedScene * shadow = new osgShadow::ShadowedScene;
shadow->setCastsShadowTraversalMask(Ge::_CastsShadowTraversalMask);
shadow->setReceivesShadowTraversalMask(Ge::_ReceivesShadowTraversalMask);
shadow->setShadowTechnique(new osgShadow::ShadowTexture);
//shadow->setShadowTechnique(new osgShadow::ShadowMap);
shadow->addChild(geodPlane.get());
shadow->addChild(grp);
return shadow;
}
//主场景
CGeDataBase * dbase = new CGeDataBase();
....//增加实体,与用户交互的一些操作比较长
//得到当前数据库场景
osg::node * node = dbase->osg_root()
//显示场景
osg::ref_ptr<osg::Group> grp = new osg::Group;
osg::ref_ptr<osg:ightSource> ls = new osg::LightSource;
//设置方向性光源,光源方向向量(1000,-1000,1000)
ls->getLight()->setPosition(osg::Vec4(1000,-1000,1000,0.0));
ls->getLight()->setAmbient(osg::Vec4(0.2,0.2,0.2,1.0));
ls->getLight()->setDiffuse(osg::Vec4(0.8,0.8,0.8,1.0));
//sm->setLight(ls.get());
grp->addChild(ls.get());
grp->addChild(node);
if (m_root == NULL)
{
m_root = new osg::Group;
m_node = grp.get();
m_root->addChild(grp.get());
}
//调用view,显示场景,省略
以下是我相关的文件
release.rar 是我编译的exe和原安装包的exe,使用的是osg-2.4
osgsrc.rar是我编译官方例子用的工程
谢谢斑竹,麻烦帮看下
[ 本帖最后由 xxxx7000 于 2009-1-5 09:25 编辑 ] |
-
-
Release.rar
60.33 KB, 下载次数: 144, 下载积分: 威望 1
我编译的exe和原exe
-
-
osgsrc.rar
19.46 KB, 下载次数: 147, 下载积分: 威望 1
我新建的工程编译原例子
|