|
刚看完OSG三维渲染引擎设计与实践的第三章(话说这不才开始么?),顺便注册了个osgchina账号~
有几个问题:
1.OSG的矩阵类是否区分对行向量或者列向量进行变换?
看到书上写着OSG不对行向量和列向量进行区分,那么有这么一个问题
假设有一个向量v,然后定义一个平移矩阵M
行向量乘矩阵:v*M = v1
列向量乘矩阵:M*v = v2
1)首先定义的矩阵式对列向量变换的矩阵还是对行向量变换的矩阵?毕竟两者互为转置矩阵。
2)v1和v2的值相等么?(如果相等的话,向量与矩阵相乘的话,OSG肯定对列向量和行向量相乘做出了一些特殊处理,比如内部先转置,然后相乘)
2.对preMult和postMult相乘的顺序迷迷糊糊的。
1)矩阵和向量相乘
Vec3d preMult(const Vec3d&) const :v*M
Vec3d postMult(const Vec3d&) const :M*v
2)矩阵叠加平移,旋转,缩放矩阵
void preMultTranslate(const Vec3d&) :M*MTranslate
void postMultTranslate(const Vec3d&) :MTranslate*M
3)矩阵乘矩阵
void preMult( const Matrixd& ) :MParameter*M
void postMult( const Matrixd& ) :M*MParameter
其中M为当前对象,另外一个为参数?如果我书写正确的话,怎么感觉不是那么一致?
3.对矩阵类的有一个函数看不懂
void decompose(Vec3d& translation, Quat& rotation, Vec3d& scale, Quat& so) const
最后的返回参数说是缩放方向,缩放不就是各个坐标x,y,z乘上一个系数么?缩放方向是什么东西?
4.数据数组和索引数组
我感觉数据数据完全可以当索引数组用啊,感觉两者唯一的区别就是索引数据的数据元素分量为1,而且要和整型兼容
5智能指针类模板
有这么一个成员函数:operator T*() const
这个成员函数是用来隐式转换用的,例如
osg::ref<osg::Node> pNode1;
osg::Node *pNode2 = pNode1;
可下边的有一个这样的举例:
osg::Geode *obj1 = *geodePtr;
这里是不是有点问题啊?感觉应该把后边的*去掉~
请各位大神指点啊.... |
|