绕任意点旋转的矩阵

三维空间中有时候需要计算绕任意点旋转的矩阵,假设绕点P(x1,y1)旋转α角度,则步骤分为三步:

1.计算将P点平移到原点的矩阵T1。

2.计算旋转α角度的旋转矩阵R1。

3.计算将从原点平移到P点的平移矩阵T2。

最终的结果矩阵matrix = T1 * R1 * T2,旋转后的顶点坐标P' = matrix * P。

 

代码如下:

 1 vec4 getRoateByPoint(vec3 point,vec3 roatePoint,float angleZ)
 2 {
 3     
 4     //=================得到变换矩阵  start====================
 5     //平移到原点的平移矩阵
 6     mat4 firstransfromMat = mat4(1.0, 0.0, 0.0, -roatePoint.x,
 7                                  0.0, 1.0, 0.0, -roatePoint.y,
 8                                  0.0, 0.0, 1.0, -roatePoint.z,
 9                                  0.0, 0.0, 0.0, 1.0); 10 0.0, 0.0, 0.0, 1.0); 11 12 13 mat4 RoateMatZ = mat4(cos(angleZ), -sin(angleZ), 0.0, 0.0, 14 sin(angleZ), cos(angleZ), 0.0, 0.0, 15 0.0, 0.0, 1.0, 0.0, 16 0.0, 0.0, 0.0, 1.0); 17 18 //平移到目标点的平移矩阵 19 mat4 lasttransformat = mat4(1.0, 0.0, 0.0, roatePoint.x, 20 0.0, 1.0, 0.0, roatePoint.y, 21 0.0, 0.0, 1.0, roatePoint.z, 22 0.0, 0.0, 0.0, 1.0); 23 //=================得到变换矩阵 end==================== 24 return firstransfromMat * RoateMatZ * lasttransformat * vec4(point,1.0);// 25 }

 

posted on 2016-12-21 14:23 bky2016 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/calence/p/6207569.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值