首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

《OpenGL超级宝典》中相关缩放矩阵代码困惑

2013-12-07 
《OpenGL超级宝典》中有关缩放矩阵代码困惑高手们来看看。我学习OpenGL,使用的是《OpenGL超级宝典》(第四版),看

《OpenGL超级宝典》中有关缩放矩阵代码困惑
高手们来看看。
我学习OpenGL,使用的是《OpenGL超级宝典》(第四版),看源代码中有关缩放矩阵的代码,有点晕。
为什么两个相同的函数m3dScaleMatrix44实现却不同啊。比如说m3dScaleMatrix44( m, 2.0 )和m3dScaleMatrix44( m, 2.0, 2.0, 2.0 )效果完全不同。


// Scale a matrix (I don't beleive in Scaling matricies ;-)
// Yes, it's faster to loop backwards... These could be 
// unrolled... but eh... if you find this is a bottleneck,
// then you should unroll it yourself

……

inline void m3dScaleMatrix44(M3DMatrix44f m, float scale)
{ for(int i = 15; i >=0; i--) m[i] *= scale; }

inline void m3dScaleMatrix44(M3DMatrix44d m, double scale)
{ for(int i = 15; i >=0; i--) m[i] *= scale; }

……

// Scale matrix. Only 4x4 matrices supported
inline void m3dScaleMatrix44(M3DMatrix44f m, float x, float y, float z)
{ m[0] *= x; m[5] *= y; m[10] *= z; }

inline void m3dScaleMatrix44(M3DMatrix44d m, double x, double y, double z)
{ m[0] *= x; m[5] *= y; m[10] *= z; }
opengl 矩阵
[解决办法]
m3dScaleMatrix44(M3DMatrix44* m, * scale)  就是一个简单的矩阵乘数计算啊

M2=M1*a 每个元素都乘以a

m3dScaleMatrix44(M3DMatrix44f m, float x, float y, float z) 这个函数只对对角线的前3个数字做了处理,不知有何用处
[解决办法]
// Scale matrix. Only 4x4 matrices supported
inline void m3dScaleMatrix44(M3DMatrix44f m, float x, float y, float z)
{ m[0] *= x; m[5] *= y; m[10] *= z; }

这个是沿着x,y,z坐标轴进行缩放。


inline void m3dScaleMatrix44(M3DMatrix44f m, float scale)
{ for(int i = 15; i >=0; i--) m[i] *= scale; }
 这个应该是沿任意方向进行缩放。

矩阵不一定要是单位矩阵。矩阵式可以级联的,可以是单位矩阵经过旋转的矩阵。

热点排行