求:3D第三人称游戏视线追踪讨论

xiao0mai 2006-03-20 06:18:08
本人最近在做一个飞机程序,如何控制摄像机追踪飞机移动,成为了一个非常头痛的问题!
问题:
1.当飞机移动时,为了保持飞机的大小不改变,要让飞机跟摄像机保持一定距离.
2.当飞机在空中做动作时,比如旋转和向各个不同方向飞时,又是一个很困难的问题.
3.如何去绑定摄像机?
...全文
191 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
triace_zhang 2006-03-25
  • 打赏
  • 举报
回复
个人认为视点问题主要是调整视锥位置和方向的问题。如在openGL中使用glLookAt函数,只要给定正确的位置,指向和向上矢量,就可以达到视点追踪的效果。

具体如采用飞行员视点(第一人称视点),默认openGl视点位于(0,0,0),指向z轴负向,如 (0,0,-1),向上矢量为y轴正向(0,1,0).可用欧拉角(heading,pitch,bank)描述飞机方位,如已知飞机位置Position(x,y,z)和欧拉角EulerAngles(){heading,pitch,bank}.

先将欧拉角EulerAngles中的heading,pitch,bank转为3×3旋转矩阵R,且此矩阵为惯性坐标系->物体坐标系的旋转矩阵。

那么视锥中新视点的在惯性坐标系中的初始位置为P_org(x+△,y+△,z+△),△为飞行员视点和飞机重心偏差。此时进行旋转P_new = P_org * R(旋转矩阵),视锥必须指向矢量为v(0,-1,0)*R(旋转矩阵),同理新的向上矢量为vup(0,1,0)*R(旋转矩阵).再调用glLookAt函数重新设置视锥就可以了。
wd_6532 2006-03-23
  • 打赏
  • 举报
回复
想象一下一个圆周,你跟飞机的前进方向差180度就够了

如果想比飞机高一点,那么在飞机倾侧平面上,飞机为圆心,以摄像机到飞机的线段为半径,旋转一个角度.

以上两个矩阵相乘. 我没有说错吧?
wd_6532 2006-03-23
  • 打赏
  • 举报
回复
我觉得不管视点在飞机内部还是外部,都应该是一样的.

假如摄像机在飞机内部,那么视线方向跟飞行员是一样的.

如果摄像机在飞机外部,我想也应该那样.

当然,也可以让用户设置选项.,来改变视角的方式. 是否与飞机偏行角相同.
xiao0mai 2006-03-23
  • 打赏
  • 举报
回复
真的谢谢各位了!你们真的给了我很大的帮助
寻开心 2006-03-23
  • 打赏
  • 举报
回复
1 视点是应该在那个圆上,但是位置和方向是说法的
如果你始终在和飞机相对位置固定的点上看飞机,那么飞机的行动你是看不出来的
你看到的飞机的样子是始终不变的

2 视点跟随没有统一的规定比如如何如何,如果认同上面的结果,那么也是一种方法
但是一般人是不希望这样的
他们希望跟随在飞机的后面一起运动,但是同时能够看到飞机的旋转和起降等姿态的变化
Bobby136 2006-03-21
  • 打赏
  • 举报
回复
让摄像机和飞机的相对坐标保持不变不就行了。
这其实和第一人称的摄像机差不多
寻开心 2006-03-21
  • 打赏
  • 举报
回复
飞机和相机坐标保持不变是不行的,比如飞机掉头飞,你看到的是飞机的头向你的,那不对

这个技术叫做视点跟随,没有标准的答案,很大程度上要根据自己的要求来想
当年我做的一个飞行模拟当中用了两种方法分别实现的

1 固定飞机和相机之间的距离,和初始位置关系
然后给相机和飞机各自不同的运动方向和转动能力的控制
飞机直线飞,当然没有问题,相对距离固定的,方向没有变化

当飞机转动的时候,飞机转动10度,相机转动5度,类似这样
那么效果上看,飞机在旋转,你也跟随在旋转,不过飞机转的快,你转的慢

2 是记录飞机的飞行路径,相机的位置比它延后一段时间
相机始终在飞机之前一段时间的位置上,以及姿态上,加一个固定的偏移
具体的参数,要根据飞行的控制方式来取经验值

8,304

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧