0

我在 C++ 中使用 DirectXTK,并且大量使用 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;
}

似乎什么也没有发生。这是相机的世界位置设置为 (0,0),精灵的世界位置设置为 (0,0)。

这是生成的图像。

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

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

任何人都可以帮助我吗?另外,如果有人能告诉我如何翻转 y,那也很棒。

4

2 回答 2

1

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

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

视图 * 平移(宽度 * .05,高度 * .05)

其中 View 是世界比例、世界旋转和世界变换的乘积的逆矩阵。

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

我=F*V

I 是单位矩阵。

于 2016-11-02T00:26:11.400 回答
1

请记住,如果您提供自定义转换,屏幕视口的默认转换仍然适用SpriteBatch。默认转换SpriteBatch使用从屏幕左上角开始的像素坐标。

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

spriteBatch->SetRotation(DXGI_MODE_ROTATION_UNSPECIFIED);

请务必阅读wiki

于 2016-11-01T15:56:28.913 回答