arcball 鼠标 相机转动
生活随笔
收集整理的這篇文章主要介紹了
arcball 鼠标 相机转动
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
利用arcball原理來是相機在某個半徑旋轉(zhuǎn),而且相機的目標(biāo)方向永遠指向最初的目標(biāo)方向,就是類似于相機在球面上旋轉(zhuǎn)并且始終指向球心。
直接上程序流圖和代碼。
arcball原理還有相關(guān)的旋轉(zhuǎn)矩陣在上一篇文章有介紹:這里
程序流圖:
完整的camera頭文件
#ifndef __CAMERA__ #define __CAMERA__#include <armadillo>struct Axis {arma::vec3 direction;//旋轉(zhuǎn)軸方向arma::vec3 position; //旋轉(zhuǎn)軸位置 };class Camera { public:Camera(const arma::vec3& position, const arma::vec3& target, const arma::vec3& upVec);~Camera() {}; public:void defineModelView();//確定視圖矩陣,必須在繪圖之前確定,每次繪圖之前應(yīng)該先調(diào)用void translateX(const double &x); //改變相機位置的X坐標(biāo)void translateY(const double &y); //改變相機位置的Y坐標(biāo)void translateZ(const double &z); //改變相機位置的Z坐標(biāo)void rotateY(const double& theta); //相機繞著y軸旋轉(zhuǎn)arma::vec3 getPosition()const { return position; } //返回相機位置坐標(biāo)信息/*arcBallRotate 函數(shù)說明:給定單位化后,鼠標(biāo)在屏幕上的偏移量,計算在arcball原理下,相機實際位置的變換,并改變相機的實際位置參數(shù)說明:double x : x方向偏移量double y : y方向便宜量*/void arcBallRotate(double x, double y);private:/* arcball 函數(shù)說明:在單位化下,計算屏幕中鼠標(biāo)移動的偏移量,在單位球上產(chǎn)生的位置變換,并且用旋轉(zhuǎn)軸和旋轉(zhuǎn)角表示參數(shù)說明:double x 范圍輸入0.0 - 1.0;表示在相機坐標(biāo)系下x方向偏移量double y 范圍輸入0.0 - 1.0;表示在相機坐標(biāo)系下y方向的偏移量arma::vec3 &axisVec 經(jīng)過計算后返回的旋轉(zhuǎn)軸方向向量,如果計算失敗返回的就是輸入值double &thete 經(jīng)過計算后旋轉(zhuǎn)的角度,若計算失敗返回輸入值函數(shù)返回值說明:如果返回true,則表示計算成功,否則表示計算失敗*/bool arcball(double x, double y, arma::vec3& axisVec, double& theta);/* cameraToWorldCoord 函數(shù)說明:將相機坐標(biāo)系中的點,向量,轉(zhuǎn)化到世界坐標(biāo)系中去。參數(shù)說明:const arma::vec3& position: 相機坐標(biāo)系中的點或者向量函數(shù)返回值說明:轉(zhuǎn)化后世界坐標(biāo)系中的點或者向量*/arma::vec3 cameraToWorldCoord(const arma::vec3& position);/*axisRotateTheta 函數(shù)說明:使相機位置 繞給定的旋轉(zhuǎn)軸 旋轉(zhuǎn)給定的角度。參數(shù)說明:cosnt Axis & axis: 旋轉(zhuǎn)坐標(biāo)軸double theta :旋轉(zhuǎn)角度值, 正值為右手螺旋,負值為左手螺旋函數(shù)返回值:旋轉(zhuǎn)后的坐標(biāo)*/arma::vec axisRotateTheta(const Axis& axis, double theta ,const arma::vec3 &origin);private:arma::vec3 position; //表示相機位置arma::vec3 target; //表示相機目標(biāo)arma::vec3 upVec;//表示上向量 };#endif // ! __CAMERA__總結(jié)
以上是生活随笔為你收集整理的arcball 鼠标 相机转动的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: armadillo 使用注意 越界不报错
- 下一篇: 数组中找重复数字