DirectX摄像头定位为第一人称射击游戏

时间:2012-03-31 11:48:03

标签: camera directx

您好我正在使用DirectX 10和C ++制作一个非常简单的第一人称射击游戏,只需要一把枪和目标,我有枪和目标,枪在射击方向射击子弹等。

然而,我无法将相机锁在枪上,看着十字准线, 对于相机,我有这个

vecEye.x = g_f_GunX;
vecEye.y = g_f_GunY + 3;
vecEye.z = g_f_GunZ - 5.0;


vecAt.x = g_f_CrossX;
vecAt.y = g_f_CrossY;
vecAt.z = g_f_CrossZ;

g_Camera.SetViewParams( &vecEye, &vecAt );

为了这个目的,我的十字准线只是一个在枪前面的物体,随着枪一起移动,我把相机的代码放在'onFrameRender'方法中

我的假设是这个代码应该把相机放在我的枪后面,当枪(和十字准线)被移动时,相机应该一直在屏幕中央看十字准线,但是在运行它时相机根本没有这样做,并且根本没有用枪或十字准线移动

任何帮助都会非常适合

1 个答案:

答案 0 :(得分:0)

  

出于此目的,我的十字准线只是一个位于枪前的物体,随着枪一起移动

除非“眼睛”直接位于枪管后面(枪将阻挡视线),否则不会起作用 - 如果“眼睛”甚至略高于枪支,你最终会通过十字准线物体看着地面,和视图方向根本不匹配摄像机方向。

处理它的几种方法:

  1. 在屏幕中间绘制十字准线作为二维形状,从相机拍摄子弹,并绘制枪模型仅供展示。我认为在“过去的日子”(厄运1等)
  2. 这是相当常见的方式
  3. 在屏幕中间绘制十字准线作为二维形状。制作一个从摄像机位置开始的碰撞检测传感器(射线),并指向与摄像机相同的方向。当用户按下“fire”时,使用此光线传感器运行碰撞查询,如果它碰到任何东西,则在该点发射火枪。如果你正在写第三人称射击游戏,那就是唯一真正处理瞄准的方法。
  4. 移除十字线和用户激光指示器/瞄准器以瞄准枪(可能看起来很酷),从枪中射出子弹。当然,激光指示射线应该来自枪。这用于零容忍,avp和其他一些游戏。
  5. 同样在3D射击游戏中,摄像机方向经常被存储为偏航/俯仰/滚动角度组合。