3维空间坐标旋转

三维空间中,每个物体有一个包围球 ,跟踪球思想有点类似拨动地球仪,就是拨动物体的包围球,物体也随之旋转,这样子可以更好的,更全面的观察物体。
主要思想就是鼠标单击屏幕,并执行拖动:画出一段弧线,起点v0,终点v1。这两点都是二维的,必须投影到三维空间中,分别记为:p0,p1, 也就是两个向量:p0,p1,进行单位化以后,二者进行差乘求出向量axis,则axis就是物体旋转轴。angle成员变量是控制球体转动速度的


 //根据二维的坐标x,y产生一组三维的坐标,单位化后存放到v中
    void trackball_Prov(int x, int y, float v[3])
    {
        GLfloat    d, a;


        //(winWidth/2, winHeight/2)为球心
        v[0] = (x - winWidth/2) / (winWidth/2);
        v[1]=(y - winHeight/2) / (winHeight/2);


        d=(float)sqrt(v[0]*v[0]+v[1]*v[1]);
        v[2]=(float)cos ( (M_PI/2.0F)* ( (d<1.0) ? d : 1.0F ) );
       // 单位化
        a=1.0F / (float)sqrt(v[0]*v[0]+v[1]*v[1]+v[2]*v[2]);
        v[0] *=a;
        v[1] *=a;
    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值