查看: 1739|回复: 3

期待得到答案的几个问题。不急

[复制链接]

该用户从未签到

发表于 2009-3-13 19:24:53 | 显示全部楼层 |阅读模式
初学OSG,也可以说初学VC编程,平时在学校写的都是一些比赛的算法题,对应用开发实在不怎么了解。

对于OSG或者是VC有几个地方不是太理解,希望得到一点点小小的指点。

1、 对于
        root->addChild(osgcool.get());
        root->addChild(trans.get());
        root->addChild(osgcool);
        root->addChild(trans);
有什么区别?什么时候该用 xxxx.get()什么时候用xxxx。
2、 对于
        osg::ref_ptr<osg::MatrixTransform>trans=new osg::MatrixTransform;
        osg::ref_ptr<osg::MatrixTransform>trans=new osg::MatrixTransform.get();
有什么区别?什么时候该用 xxxx.get()什么时候用xxxx

3、
osg::Matrixd CSouth::getMatrix(void) const        //得到矩阵,这是标准接口,用于控制场景
{
        //得到旋转后的矩阵,其实也就是视口矩阵,用此控制场景
        osg::Matrixd mat;
        mat.makeRotate(
                m_vRotation._v[0],osg::Vec3(1.0f,0.0f,0.0f),
                m_vRotation._v[1],osg::Vec3(0.0f,1.0f,0.0f),
                m_vRotation._v[2],osg::Vec3(0.0f,0.0f,1.0f));

        return mat * osg::Matrixd::translate(m_vPosition);
}
这个矩阵怎么理解,那些坐标代表着什么?为何是3*3的?

4、
osg::Matrixd CSouth::getInverseMatrix(void) const      //得到逆矩阵,标准接口,控制场景
{
        osg::Matrixd mat;
        mat.makeRotate(
                m_vRotation._v[0], osg::Vec3(1.0f, 0.0f, 0.0f),
                m_vRotation._v[1], osg::Vec3(0.0f, 1.0f, 0.0f),
                m_vRotation._v[2], osg::Vec3(0.0f, 0.0f, 1.0f));

        return osg::Matrixd::inverse(mat * osg::Matrixd::translate(m_vPosition));

}

逆矩阵又是做什么的?

小弟不才,这么多不懂的,希望大家多多帮忙,谢谢了!!

该用户从未签到

发表于 2009-3-13 19:52:55 | 显示全部楼层
1、osg::ref_ptr<CObject> ptrObject 用get()是获得ptrObject 智能指针对象维护的原生指针。智能指针可以参考openscengraph网站的解析文章。不过建议你看看文献1

2、         osg::ref_ptr<osg::MatrixTransform>trans=new osg::MatrixTransform;
        osg::ref_ptr<osg::MatrixTransform>trans2=new osg::MatrixTransform.get();
第二行是无法通过编译的,第一行生成一个osg::MatrixTransform对象,赋给trans智能指针对象管理。
3、          m_vRotation._v[0],osg::Vec3(1.0f,0.0f,0.0f),
                m_vRotation._v[1],osg::Vec3(0.0f,1.0f,0.0f),
                m_vRotation._v[2],osg::Vec3(0.0f,0.0f,1.0f));
此三行,逗号前的数值为旋转的角度大小,后面一个三维矢量表示旋转的轴的方向。 请参考文献2。getMatrix得到的矩阵应该是用来把物体先按m_vRotation指定的角度转好,再放到m_vPosition位置。
4、逆矩阵就是前一矩阵求逆所得,不知道你要用来做什么。

不知道说得对不对。

文献1.《The C++ programming language, special edition》
文献2.《3D游戏与计算机图形学中的数学》

该用户从未签到

发表于 2009-3-13 19:59:29 | 显示全部楼层
kunsung兄讲解得不错~~楼主可以先详细了解一下ref_ptr的使用,当然我的教程以后也会详细讲解;矩阵的知识则对于三维图形学是不可或缺的,一定要打牢基础,不然很多东西的学习会遇到巨大障碍。

该用户从未签到

 楼主| 发表于 2009-3-14 14:03:01 | 显示全部楼层
谢谢两位的指点。。受益了~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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