谈谈三维旋转

进行三维软件的开发,旋转是必不可少而且非常重要的一部分.

下面谈谈我对旋转的理解,偶的文字表述能力非常差,如果你觉得表述有问题,请无视.

旋转有两种方式:旋转场景或对象,旋转摄像机.

1.旋转场景或对象.

    这是对场景或对象直接操作,操作之后物体的坐标值在应用矩阵后是发生了变化的.可用图形开发库提供的命令执行,或者直接操作三维矩阵.

    1.1用图形开发库提供的命令执行.

           比如在opengl中

              glrotatef rotangle,rotaxis.x,rotaxis.y,rotaxis.z

              绘制场景或对象

    1.2 对三维矩阵操作.

          有两种情况:

          一.你不会写旋转矩阵:让opengl代替这部分工作

             glloadidentity

             glrotatef rotangle,rotaxis.x,rotaxis.y,rotaxis.z

             glgetdoublev glmodelviewmatrix ,m'此时得到的就是旋转矩阵

             '此次的旋转应该和以前对场景的操作起作用,使用矩阵相乘

             glloadmatrixd 之前操作场景的矩阵

             glmultmatrixd m'也可以自己写矩阵相乘.

          二.你会计算旋转矩阵

             '自己算出当前的旋转矩阵

             '与之前的矩阵相乘.

2.旋转摄像机

      这种情况,保持了场景或物体的坐标值不变,只是移动了摄像机.可以创建一个摄像机类,最基本有的

        eyepos

        lookcenter

        up

        right

       旋转前,即鼠标按下时获得旋转的中心rotcenter,在鼠标移动时:

             计算旋转轴

             围绕旋转轴旋转eyepos,lookcenter,up,right

       下一次渲染时直接glulookat eyepos,lookcenter,up即可.

关于旋转中心的问题:

        旋转中心可以是:场景原点,物体包围盒的中心,鼠标拾取的位置,或者即时计算出的位置.

即时计算旋转中心(适合整个场景只有一个大的对象,由于移动,缩放等操作,仅有它的一部分可见,可见部分在视区是随意的):

      每次旋转时找出所有在可见区的点

      计算出这些点的包围盒

      求出中心

这样很精确,但有一个缺点,当数据量很大时,电脑就会死掉.改进的方法是找出物体关键位置,只计算这些关键位置与视区的交.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值