Camera 用于第一人称射击的DirectX摄像机定位 我用DirectX 10和C++制作了一个非常简单的第一人称射击游戏,只不过是一个枪和目标,我有枪和目标,枪射击的方向是子弹。

Camera 用于第一人称射击的DirectX摄像机定位 我用DirectX 10和C++制作了一个非常简单的第一人称射击游戏,只不过是一个枪和目标,我有枪和目标,枪射击的方向是子弹。,camera,directx,Camera,Directx,但是我不能让摄像机锁定在枪上,看着十字准线, 我有这个相机 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 ); 为此,我的十字线只是枪前面的一个对象,它随着枪移动,

但是我不能让摄像机锁定在枪上,看着十字准线, 我有这个相机

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”方法中

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

任何帮助都是非常感激的

出于这个目的,我的十字线只是枪前的一个物体,它随着枪移动

除非“眼睛”直接位于枪管后面(枪管会挡住视线),否则这是行不通的——如果“眼睛”甚至略高于枪管,你最终会通过十字线对象看地面,而视线方向根本与相机方向不匹配

有几种处理方法:

  • 在屏幕中部画十字准线作为2D形状,从相机射出子弹,画枪模型只是为了显示。我认为这是“旧时代”(厄运1之类)中相当普遍的做法
  • 在屏幕中部画十字准线作为2D形状。制作一个从相机位置开始的碰撞检测传感器(光线),并指向与相机相同的方向。当用户按下“fire”键时,使用这个光线传感器运行一个碰撞查询,如果它击中任何东西,在那个点上开火。如果你写的是第三人称射击游戏,这是处理瞄准的唯一真正方法
  • 移除十字线和用户激光指针/瞄准镜以对准枪(可能看起来很酷),从枪中射出子弹。当然,激光指针射线应该来自枪。这被用于零容忍,avp和其他一些游戏

  • 此外,在3d射手中,摄像机方向通常存储为角度的偏航/俯仰/滚动组合

    谢谢你,我现在就试试看,别以为你能解释我的另一个问题(双关语不是有意的)