游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2935|回复: 1

关于TransformKeyFrame关键帧动画中的旋转位移参数

[复制链接]

14

主题

29

帖子

29

积分

注册会员

Rank: 2

积分
29
发表于 2007-11-29 15:49:00 | 显示全部楼层 |阅读模式
我想通过设定关键帧在场景中指定一个漫游路径,然后实现一个自动漫游,其中的每一个关键帧中的相机所在的位置和朝向都事先在手工漫游过程中采集得到,采集的数据包括
mCamera->getPosition();
mCamera->getOrientation();
mCamera->getDirection();
通过关键帧生成自动漫游部分的代码如下:
struct TrackPoint
{
        Ogre::Vector3 pos;
        Ogre:uaternion orientation;
        Ogre::Vector3 direction;
};
std::vector<TrackPoint> TourTrack;        // 手工获取的关键帧中的相机位置、朝向等信息
SceneNode* nCameraNode;        // 用来挂接相机的节点
void XDemoApp::createKeyFrames(void)
{
        int timeSpan = 1.5;        // 每两个关键帧之间的时间间隔
        int tourTime = 0;                // 当前时间
        Vector3 pos, init_pos;
        Vector3 direction, init_direction;
        Quaternion quat;
        Quaternion init_orientation;
        // 创建关键帧动画
        Animation* anim = mSceneMgr->createAnimation("HS_Track", TourTrack.size() * timeSpan);
        anim->setInterpolationMode(Animation::IM_SPLINE);
        // 获取初始的相机位置、朝向等信息
        init_pos = TourTrack[0].pos;
        init_direction = TourTrack[0].direction;
        init_orientation = TourTrack[0].orientation;
        // 设置相机初始位置和朝向
        mCamera->setPosition(init_pos);
        mCamera->setOrientation(init_orientation);

        nCameraNode = mSceneMgr->getRootSceneNode()->createChildSceneNode();
        NodeAnimationTrack* track = anim->createNodeTrack(0, nCameraNode);
        // 设置各个关键帧
        TransformKeyFrame* key = track->createNodeKeyFrame(0);
        std::vector<TrackPoint>::iterator it;
        for(it = TourTrack.begin() + 1; it != TourTrack.end(); it++)
        {
                tourTime += timeSpan;        // 当前时间
                key = track->createNodeKeyFrame(tourTime);
                pos = (*it).pos;
                key->setTranslate(pos - init_pos);        // 设置当前关键帧的相对初始帧的相对位移
                direction = (*it).direction;
                quat = init_direction.getRotationTo(direction);
                key->setRotation(quat);                        // 设置当前关键帧的相对初始帧的相对旋转位移
        }
        // 最后一帧
        key = track->createNodeKeyFrame(TourTrack.size() * timeSpan);
        key->setTranslate(Vector3::ZERO);
        key->setRotation(Quaternion::ZERO);

        mAnimState = mSceneMgr->createAnimationState("HS_Track");
        mAnimState->setEnabled(true);
        mCamera->setFixedYawAxis(false);
        nCameraNode->attachObject(mCamera);        // 将相机挂接到相机节点上
}
这里和Demo_CameraTrack例子不同的是:例子中有
mCamera->setAutoTracking(true, headNode);
的语句,相机在自动漫游过程中始终朝向怪兽头,但我希望相机在自动漫游过程中的朝向更加自由,能在各个关键帧相机朝向之间插值,而不是总是盯着某个物体。
程序的运行结果是:
如果不加key->setRotation(...)语句,则只能自动位移(位移正确),不能自动旋转,加了key->setRotation(...)语句之后,相机的位移、朝向就全不对了。
请问诸位:
相机自动漫游过程中的朝向不正确问题是什么原因造成的?该如何解决?

14

主题

29

帖子

29

积分

注册会员

Rank: 2

积分
29
 楼主| 发表于 2007-11-29 15:52:00 | 显示全部楼层

Re: 关于TransformKeyFrame关键帧动画中的旋转位移参数

困惑很久了,哪位大侠帮我解答一下呀!在下感激不尽!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-17 17:12

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表