我正在try 在XNA(MonoGame)中创建第一人称控制器.然而,我不确定如何旋转我的3D相机

有人告诉我要制作旋转矩阵,但我不确定如何将其实现到我的相机中.

我try 过以下操作:

Matrix rotation = Matrix.CreateRotationX(MathHelper.ToRadians(1f));

我不确定如何将其添加到我的相机中,以便我可以左右旋转我的相机.

有什么建议吗?

推荐答案

通常,在渲染任何内容之前,您会将投影、视图,有时还会发送模型矩阵到着色器(Effect/BasicEffect).视图矩阵基本上代表您的相机.我假设您正在使用BasicEffect并且已经创建了投影矩阵.

您可以用途:

var Rotation = Quaternion.CreateFromYawPitchRoll(XAxisAngleHere, YAxisAngleHere, 0);

其中X(Yaw)是上下旋转,Y(Pitch)是左右旋转(如果y是投影矩阵中的向上轴).然后,这些将通过第一人称控制器的鼠标移动来控制(鼠标X控制Y,鼠标Y控制X).

对于表示视图矩阵的"完整"相机,您可以执行以下操作:

var Rotation = Quaternion.CreateFromYawPitchRoll(XRotation, YRotation, 0);
var CameraWorld = Matrix.CreateWorld(CameraPositionInWorld, Vector3.Transform(Vector3.Forward, Rotation), Vector3.Transform(Vector3.Up, Rotation));
var View = Matrix.Invert(CameraWorld);

在这里,我们首先计算代表相机在3D世界中的位置和旋转的世界矩阵.为了获得正确的视图矩阵,我们必须先倒置该相机世界矩阵,然后将其分配给着色器的(BasicEffect)视图参数.

如果您需要更多信息,请告诉我!

Csharp相关问答推荐

我可以将Expressc操作设置为在另一个Expressc操作完成后自动发生吗?

JsonSerializer.Deserialize<;TValue>;(String,JsonSerializerOptions)何时返回空?

使用带有WithAppOnly()请求选项的pageIterator

在调整大小的控件上绘制

在实体框架中处理通用实体&S变更跟踪器

在ASP.NET Core Web API项目中通过中间件修改`Request.Path`不会更改使用的控制器/操作

如何将MongoDB序列化程序设置为内部对象属性

ASP.NET核心MVC SqlException:违反主键约束';PK_USER';.无法在对象';数据库中插入重复的密钥.用户';

.NET并发词典交换值

DbContext-传递自定义配置选项

JsonSchema.Net删除假阳性判断结果

try 链接被委派者(多播委托)时,无法将获取运算符应用于类型为';方法组&39;和方法组';的操作数

当try 测试具有协变返回类型的抽象属性时,类似功能引发System.ArgumentException

为什么我的用户界面对象移动到略低于实际目标?

FakeItEasy自动嘲弄内容

从HTML元素获取 colored颜色

将列表转换为带有逗号分隔字符串形式的值的字典

处理方法内部过滤与外部过滤

实体框架允许您具有筛选的属性吗?

当我在Git中暂存文件更改时,它们会消失