查看: 1457|回复: 5

osg::Drawable派生类 osgteapot的例子为何不能显示两个茶壶

[复制链接]

该用户从未签到

发表于 2011-3-31 12:13:27 | 显示全部楼层 |阅读模式
class Teapot : public osg:rawable
{
     略,osgteapot的例子一样,未改动
}

osg::Group* createTeapot()
{
    osg::Group* root = new osg::Group();
    osg::MatrixTransform* trans = new osg::MatrixTransform() ;

    osg::Geode* geode = new osg::Geode();
    // add the teapot to the geode.
    geode->addDrawable( new Teapot );       //第一个茶壶
    osg::Geode* geode2 = new osg::Geode();
    geode2->addDrawable( new Teapot );     //第二个茶壶
    trans->setMatrix(osg::Matrix::translate(5, 0, 2)) ;
    trans->addChild(geode2) ;                     //第二个茶壶平移
    root->addChild(geode);                         //根节点下添加第一个茶壶
    root->addChild(trans);                          //根节点下添加第二个茶壶         
    return root;
}

出现问题如下:
运行结果只显示第二个茶壶,就是只显示一个茶壶,而且
root->addChild(geode);                         //根节点下添加第一个茶壶
root->addChild(trans);                          //根节点下添加第二个茶壶   
这两行谁排在后面就显示谁,为什么呢,是后面的Drawable把前面的覆盖了?怎样才能把这两个茶壶都显示出来?

int main(int , char **)
{
// construct the viewer.
    osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer;
    // add model to viewer.
    viewer->setSceneData( createTeapot() );
    return viewer->run();
}

该用户从未签到

发表于 2011-3-31 17:00:14 | 显示全部楼层
teapot这个例子并不是很完善的,至少您还需要在drawImplementation()中pushMatrix和popMatrix才能让MatrixTransform发挥作用

该用户从未签到

发表于 2011-4-1 11:28:24 | 显示全部楼层
这样子啊,外面的MT不起作用竟然

该用户从未签到

 楼主| 发表于 2011-4-2 10:04:26 | 显示全部楼层
不好意思,MT是起作用的,只是因为我在drawImplementation()多写了一句
glclear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
这句话导致不能同时显示两个面,
root->addChild(geode);                         //根节点下添加第一个茶壶
root->addChild(trans);                          //根节点下添加第二个茶壶   
只显示最后一个,第一个一闪就没了,缓存还真是神奇啊,困扰了我好几天才找到这个错误
希望高手能大概点拨一下缓存在osg里是如何作用的,就是为什么会出现这种情况呢?

该用户从未签到

发表于 2011-4-2 13:23:27 | 显示全部楼层
glClear是清除缓存,这样您之前刚绘制的内容(颜色与深度等)都会被清除掉,因此当然把第一个茶壶清掉了。这是OpenGL最基本的概念了,和OSG没什么关系

该用户从未签到

发表于 2011-4-5 09:32:32 | 显示全部楼层
你可以通过判断绘制的定点数和面数来确定是否绘制了两遍而在同一个位置上,如果是,纳闷就是array说的矩阵的原因
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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