c++ - directx c++ 相机运动

标签 c++ camera directx game-development

我是 directx 的新手,所以这听起来很基础。

我已经开始开发一款第一人称游戏,您可以在其中穿行房间,我使用的编码语言是 c++,并且我正在使用 directx 来帮助我创建游戏。

到目前为止,我已经绘制了所有带有门等的房间,但我有点卡住如何制作第一人称相机并允许用户使用键盘上的箭头键向前、向后和左右移动。

我是初学者,越简单越好。

谁能帮我解决这个问题或指出正确的方向?

提前致谢

最佳答案

网络上有很多关于这个主题的教程,因此 Google 一定会帮助您。

至于基础知识:您需要存储您的位置和相机旋转。假设 Z 是您的上轴,您应该使用箭头仅更改 X 和 Y。

我们还可以说,您将存储的相机方向存储为沿 Z 轴(移动方向)和 X 轴(上下看)的旋转组合。

简单类:

class Player 
{
protected:
    float3 Position; // Z-up
    float2 CameraRotation; // X for turning, Y for up-down
public:
    void MoveForward()
    {
        Position.X += -cosf(CameraRotation.X) * PLAYER_SPEED;
        Position.Y += -sinf(CameraRotation.X) * PLAYER_SPEED;
    }
    // when using any other arrow, just add a multiply of PI/2 to the camera rotation
    // PI for backwards, +PI/2 for left strafe and -PI/2 for right strafe.
    // If you don't want to use mouse, use left and right arrow to modify camera rotation
    // and MoveForward and Backward will look the same, having different signs.
};

sinf 和 cosf 函数前面的“-”符号在那里,因为您可能会想要这种行为,请随意更改它们。

至于相机,您必须在帧之间实现鼠标增量。在每一帧中,将鼠标位置与前一帧进行比较。然后将其乘以转弯和注视速度并直接设置为相机值。

希望这对您有所帮助。

关于c++ - directx c++ 相机运动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8042365/

相关文章:

java - 打开相机,图片大小为 16 :9 programatically

c++ - 如何称呼某事。 else 除了带有 new[] 运算符的类的默认构造函数之外

c++ - 使用 phoenix::bind 将 spirit 解析的结构传递给函数

ios - 替代 AVFoundation captureStillImageAsynchronouslyFromConnection

ios - AVCapturePhotoOutput 没有成员 'captureStillImageAsynchronously'

c# - 在 C# WPF 或 Windows 窗体应用程序中使用 DirectX c++ DLL

c++ - 将项目添加到 Internet Explorer 的右键单击上下文菜单

c++ - 为什么在通过添加字符串文字和 char 进行初始化时不打印字符串

c++ - 当我运行书中的演示项目时,Directx 12 说找不到指定的路径

c++ - 如何在 OpenGL 或 Win32 中获取显卡型号名称?