gpt4 book ai didi

c# - XNA/C# 世界矩阵中的 2D 坐标缩放到 3D View 矩阵?

转载 作者:太空宇宙 更新时间:2023-11-03 14:13:34 25 4
gpt4 key购买 nike

这是我的转换。我从一个简单的 2D 相机的例子中得到它。

    public Matrix Transform(GraphicsDevice graphicsDevice)
{
float ViewportWidth = graphicsDevice.Viewport.Width;
float ViewportHeight = graphicsDevice.Viewport.Height;

matrixTransform =
Matrix.CreateTranslation(new Vector3(-cameraPosition.X, -cameraPosition.Y, 0)) *
Matrix.CreateRotationZ(Rotation) *
Matrix.CreateScale(new Vector3(Zoom, Zoom, 0)) *
Matrix.CreateTranslation(
new Vector3(ViewportWidth * 0.5f, ViewportHeight * 0.5f, 0));
return matrixTransform;
}

如果我理解正确的话,它允许滚动(旋转)、缩放时 Sprite 比例变化以及世界和相机之间的平移以进行简单的上、下、左、右控制。但是,它不会改变 Z 深度。

但我需要的是缩放游戏世界,而不仅仅是绘制的 Sprite 。我假设为了做到这一点,我需要改变相机和世界矩阵之间的 Z 距离。

我是编程新手,对矩阵一般只有简单的了解。我对 XNA 如何在绘制方法中使用它们知之甚少。到目前为止,我想从毫无结果的答案中拔出头发来……我只需要世界坐标来缩放缩放,这样在我的鼠标处于缩放前 X.60 之前,Y.60 将位于 X .600 Y.600 后缩放(即:缩放级别 0.1)。但是我的鼠标没有移动,只是世界在视野中变大了(或缩小了)。

最佳答案

我知道这个问题很老,但这是为了防止有人遇到这个问题而找不到解决方案。 @RogueDeus 在使用相机放大或缩小时试图转换缩放的输入坐标。为了缩放鼠标,您只需要获取缩放的逆矩阵即可。

所以如果他的比例矩阵是这样创建的:

Matrix.CreateScale(zoom, zoom, 0);

鼠标坐标应通过必要的平移进行反向缩放和移动:

float ViewportWidth = graphicsDevice.Viewport.Width;
float ViewportHeight = graphicsDevice.Viewport.Height;

Matrix scale = Matrix.CreateScale(zoom, zoom, 0);
Matrix inputScalar = Matrix.Invert(scale);

...

public MouseState transformMouse(MouseState mouse)
{
/// Shifts the position to 0-relative
Vector2 newPosition = new Vector2(mouse.X - ViewportWidth,
mouse.Y - ViewportHeight);

/// Scales the input to a proper size
newPosition = Vector2.Transform(newPosition, InputScalar);

return new MouseState((int)newPosition.X, (int)newPosition.Y,
mouse.ScrollWheelValue, mouse.LeftButton,
mouse.MiddleButton, mouse.RightButton,
mouse.XButton1, mouse.XButton2);
}

关于c# - XNA/C# 世界矩阵中的 2D 坐标缩放到 3D View 矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7096332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com