DirectxTK SpriteBatch和视口居中

时间:2016-11-01 08:14:07

标签: c++ xna directx directxtk

我正在使用DirectXTK for C ++,并且正在大量使用sprite批处理函数。

我正在尝试开发等距渲染引擎。我已经让等距渲染正常工作了。随着抵消。但是我遇到了一个主要问题。

我不能为我的生活弄清楚如何将相机的中心对准世界的(0,0)或任何其他的坐标。

将这个直接从相机生成的变换矩阵注入到SpriteBatch.Begin()

之后
Matrix Camera::getTransformMatrix() {

    Matrix Transform = Transform.CreateTranslation(Vector3(World_Pos.x, World_Pos.y, 0));
    Matrix Rotation = Rotation.CreateRotationZ(0);
    Matrix Scale = Scale.CreateScale(ZoomFactor, ZoomFactor, 1);
    return  Transform * Rotation * Scale;
}

似乎没有发生任何事情。这是将Camera的世界位置设置为(0,0)并将精灵的世界位置设置为(0,0)。

这是生成的图像。

http://i.imgur.com/Bep7l5a.png

由于调试原因,我关闭了alpha混合和精灵偏移。

有人能帮帮我吗?此外,如果有人能告诉我如何翻转那些也会很棒的。

2 个答案:

答案 0 :(得分:1)

请注意,如果您向SpriteBatch提供自定义转换,则仍会应用屏幕视口的默认转换。默认转换使SpriteBatch适用于从屏幕左上角开始的像素坐标。

如果您希望“原样”使用自定义转换而不与最终视口转换连接,则可以使用此特殊情况进行方向处理:

spriteBatch->SetRotation(DXGI_MODE_ROTATION_UNSPECIFIED);

请务必阅读wiki

答案 1 :(得分:1)

我找到了答案。对于那些遇到这个问题的人。你需要补偿视口需要转换到中心(0,0)到屏幕中心的事实。

也就是说你需要的矩阵是......

查看*翻译(宽* .05,高* .05)

视图是世界规模,世界轮换和世界转型产品的逆矩阵。

使得最终世界变换矩阵F和视图矩阵V的乘积满足......

我= F * V

我是单位矩阵。