我正在使用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混合和精灵偏移。
有人能帮帮我吗?此外,如果有人能告诉我如何翻转那些也会很棒的。
答案 0 :(得分:1)
请注意,如果您向SpriteBatch
提供自定义转换,则仍会应用屏幕视口的默认转换。默认转换使SpriteBatch
适用于从屏幕左上角开始的像素坐标。
如果您希望“原样”使用自定义转换而不与最终视口转换连接,则可以使用此特殊情况进行方向处理:
spriteBatch->SetRotation(DXGI_MODE_ROTATION_UNSPECIFIED);
请务必阅读wiki。
答案 1 :(得分:1)
我找到了答案。对于那些遇到这个问题的人。你需要补偿视口需要转换到中心(0,0)到屏幕中心的事实。
也就是说你需要的矩阵是......
查看*翻译(宽* .05,高* .05)
视图是世界规模,世界轮换和世界转型产品的逆矩阵。
使得最终世界变换矩阵F和视图矩阵V的乘积满足......
我= F * V
我是单位矩阵。