繞任意點旋轉的矩陣


三維空間中有時候需要計算繞任意點旋轉的矩陣,假設繞點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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM