游戏开发论坛

 找回密码
 立即注册
搜索
查看: 8460|回复: 5

OGRE中的第三人称Camera控制问题

[复制链接]

1

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2008-1-9 16:56:00 | 显示全部楼层 |阅读模式
请教各路英雄:

    我做了一个第三人称Camera,我让他lookAt我的Player,Camera本身位置的运动轨迹是一个球面。我取得光标的相对位移Vector3(ms.X.rel * RotateNum,ms.Y.rel * RotateNum,0) 加上Camera原来点的位置,作为新的位置,再将这个向量和半径dis,作出一个新向量作为真正的Camera位置,但问题是旋转角度无法超过90度,例如开始我在player正后方,只能转到侧方,却无法转到正前方,不知道为什么,那位英雄作过类似的控制阿,指点一下啊,谢谢了!


bool processUnbufferedMouseInput(const FrameEvent& evt)
{
   using namespace OIS;

   // Rotation factors, may not be used if the second mouse button is pressed
   // 2nd mouse button - slide, otherwise rotate
   const MouseState &ms = mMouse->getMouseState();
   if( ms.buttonDown( MB_Right ) )
   {
       Vector3 deltaPos = mChar->getCameraNode()->getPosition() +
                          Vector3(ms.X.rel * RotateNum,ms.Y.rel * RotateNum,0);

       Vector3 disVec   = deltaPos - mChar->getSightNode()->getPosition();
       disVec.normalise();
       Vector3 desVec   = mChar->getSightNode()->getPosition() +
                          disVec * mChar->GetDisFromCamToTarget();

       mExCamera->instantUpdate(desVec,mChar->getSightNode()->getPosition());
       mChar->SetCameraNodePos(desVec);
                                                       
    }
    else
    {
                       
    }

    return true;
}

0

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2008-1-10 05:54:00 | 显示全部楼层

Re:OGRE中的第三人称Camera控制问题

万象节锁??

1

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2008-1-10 13:38:00 | 显示全部楼层

Re:OGRE中的第三人称Camera控制问题

就是一个camera围绕着一个player转动阿,但怎么也无法转到player正面,郁闷

97

主题

590

帖子

590

积分

高级会员

Rank: 4

积分
590
QQ
发表于 2008-1-20 00:59:00 | 显示全部楼层

Re:OGRE中的第三人称Camera控制问题

摄像机节点绑定在人物上,然后再设置摄像机相对位置和朝向

17

主题

55

帖子

55

积分

注册会员

Rank: 2

积分
55
发表于 2008-1-21 00:58:00 | 显示全部楼层

Re:OGRE中的第三人称Camera控制问题

首先,我觉得应该看看是否是引擎限制了摄象机面朝角色前方(我才用ORGE,不好意思)
第二,我总觉得
Vector3 deltaPos = mChar->getCameraNode()->getPosition() +
                          Vector3(ms.X.rel * RotateNum,ms.Y.rel * RotateNum,0);

       Vector3 disVec   = deltaPos - mChar->getSightNode()->getPosition();
       disVec.normalise();
       Vector3 desVec   = mChar->getSightNode()->getPosition() +
                          disVec * mChar->GetDisFromCamToTarget();

这段有不对的地方~~~~

我的做法是,用角度来做,你还是先用你的方法来做吧,之后我再写出的我方法,(献丑了!)
PS:不好意思噶,小弟只是懂一点噶,各位大哥嘴下留情!~~

0

主题

48

帖子

58

积分

注册会员

Rank: 2

积分
58
发表于 2008-1-21 10:52:00 | 显示全部楼层

Re:OGRE中的第三人称Camera控制问题

哥们,最简单就是实现一个相机的注视功能,lookAt(position),每次translate后再调用lookAt,很容易就可以实现围绕人物转了,我的方法是将相机挂在SceneNode上面,初始化的时候设置相机朝向,Camare::setDirection(Vector3(0,0,-1)),之后就完全操作SceneNode
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-19 21:54

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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