我正在为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混合和sprite偏移。
有谁能帮帮我吗?另外,如果有人能告诉我如何反转y,那就太好了。
发布于 2016-11-01 23:56:29
请记住,如果向SpriteBatch提供自定义转换,则仍然应用screen视口的默认转换。默认转换使SpriteBatch使用从屏幕左上角开始的像素坐标。
如果您希望“按原样”使用自定义转换,而不是与最终的视口转换连接,则可以使用此特殊情况进行方向处理:
spriteBatch->SetRotation(DXGI_MODE_ROTATION_UNSPECIFIED);请务必阅读wiki。
发布于 2016-11-02 08:26:11
我找到了答案。对于那些也遇到这个问题的人。您需要补偿这样一个事实,即需要将视口转换为屏幕中心的中心(0,0)。
也就是说,你需要的矩阵是...
视图*平移(宽度* .05,高度* .05)
其中View是世界比例、世界旋转和世界变换的乘积的逆矩阵。
使得最终世界变换矩阵F和视图矩阵V的乘积满足…
I=F*V
I是单位矩阵。
https://stackoverflow.com/questions/40356285
复制相似问题