查看: 3295|回复: 5

求助 三个问题

[复制链接]

该用户从未签到

发表于 2008-3-7 12:11:51 | 显示全部楼层 |阅读模式
1、osg中如何读入.avi格式的视频文件,需要什么转换吗?
2、我在Group节点中加入了很多个Node节点,所有Node节点都是以名称node加入的,该如何通过其他的属性获得某个Node节点的指针呢?
3、我创建了一个Texture3D的纹理,并且添加到一个节点上,但是节点的纹理没有变化,是不是什么属性没有设置好啊?
  • TA的每日心情
    开心
    2019-11-11 10:36
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2008-3-7 12:59:25 | 显示全部楼层
    1、osg中如何读入.avi格式的视频文件,需要什么转换吗?

    不需要什么转换,编译时,编译quicktime插件即可,本论坛中提供的2.3.4安装包中带此插件,可以到该版查看下载帖。  安装后,,以读入纹理的方式读入文件.AVI即可

    2、我在Group节点中加入了很多个Node节点,所有Node节点都是以名称node加入的,该如何通过其他的属性获得某个Node节点的指针呢?

    这个很简单,你直接可以得到指定的孩子,这是一种方法,你可以遍历结点根据名称或是指针类型等等方法找到,这也是一种方法~
    3、我创建了一个Texture3D的纹理,并且添加到一个节点上,但是节点的纹理没有变化,是不是什么属性没有设置好啊?

    什么意思,纹理加在节点上?

    该用户从未签到

     楼主| 发表于 2008-3-8 12:12:30 | 显示全部楼层
    原帖由 FreeSouth 于 2008-3-7 12:59 发表

    不需要什么转换,编译时,编译quicktime插件即可,本论坛中提供的2.3.4安装包中带此插件,可以到该版查看下载帖。  安装后,,以读入纹理的方式读入文件.AVI即可


    这个很简单,你直接可以得到指定的孩子,这 ...



    关于第二个问题:
    void CChildView::OnFileImport()
    {
            CFileDialog fileDlg(true);
            CString pathName;
            CString fileName;
             if(fileDlg.DoModal()==IDOK)
            {
                    pathName=fileDlg.GetPathName();
                    fileName=fileDlg.GetFileName();
            }
            osg::ref_ptr<osg::Node> node=osgDB::readNodeFile(pathName.GetString());
            osg->mRoot->addChild(node.get());
    }
    节点的类型和名字都一样,能不能根据读入的文件名字加以区别呢?实在是很困惑
    第三个问题:
    加入纹理:
               osg::ref_ptr<osg::Texture3D>texture = new osg::Texture3D;
             texture->setDataVariance(osg::Object:YNAMIC);
            osg::ref_ptr<osg::Image>face = osgDB::readImageFile("pluto256128.jpg");
            texture->setImage(face.get());
             osg::StateSet * state;
            state->setTextureAttributeAndModes(0,texture.get(),osg::StateAttribute::ON);
             osg::ref_ptr<osg::Node>mModel = osgDB::readNodeFile("cow.osg");
            mModel->setStateSet(state);
    有什么问题吗?

    该用户从未签到

    发表于 2008-3-8 14:37:13 | 显示全部楼层
    如果节点的名字和属性都一样,确实就不好区分了,我想您只能通过指定getChild的索引号来获取某个子节点。建议各个节点的名字尽量不同,这可以通过在建模软件中指定对象或组的名称来完成。
    至于3D纹理的指定,您可以参考一下osgtexture3d这个例子,它所需要的纹理图片必须是一个三维图片,通常也可以理解为多个同样大小和格式的2D图片按多层分布形成。官方的例子中使用了copySubImage方法,将多幅2D图片添加到Texture3D对象的各个层中,这与OpenGL中指定3D纹理的方式基本相同。代码中的pluto256128.jpg,我猜想并非一幅三维图片,所以它只能显示在第一层。

    该用户从未签到

     楼主| 发表于 2008-3-9 10:38:45 | 显示全部楼层
    原帖由 array 于 2008-3-8 14:37 发表
    如果节点的名字和属性都一样,确实就不好区分了,我想您只能通过指定getChild的索引号来获取某个子节点。建议各个节点的名字尽量不同,这可以通过在建模软件中指定对象或组的名称来完成。
    至于3D纹理的指定,您可以 ...

    如果要每个节点的名字不一样,在mfc中,除了使用CList或者Vector动态分配外,还有什么更好的方法吗?
    osg 能识别的三维图片的后缀有哪些呢?

    该用户从未签到

    发表于 2008-3-9 13:55:04 | 显示全部楼层
    原帖由 lawn 于 2008-3-9 10:38 发表

    如果要每个节点的名字不一样,在mfc中,除了使用CList或者Vector动态分配外,还有什么更好的方法吗?
    osg 能识别的三维图片的后缀有哪些呢?


    在程序中名字可以使用node->setName来设置,至于如何命名,这就是模型设计者的工作了~~
    至于三维图片格式,我想hdr算一个。其他还有哪些我也不太清楚,不妨问一下hesicong,他应该是体渲染方面的专家~~
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

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

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

    联系我们

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