首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DirectxTK SpriteBatch和视口居中

DirectxTK SpriteBatch和视口居中
EN

Stack Overflow用户
提问于 2016-11-01 16:14:07
回答 2查看 293关注 0票数 0

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

我正在尝试开发一个等轴测渲染引擎。我已经让等轴测渲染正常工作了。以及偏移量。然而,我遇到了一个主要问题。

我无论如何也想不出如何将相机的中心对准世界的(0,0)或任何其他坐标。

将摄像机直接生成的转换矩阵注入SpriteBatch.Begin()

代码语言:javascript
复制
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,那就太好了。

EN

回答 2

Stack Overflow用户

发布于 2016-11-01 23:56:29

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

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

代码语言:javascript
复制
spriteBatch->SetRotation(DXGI_MODE_ROTATION_UNSPECIFIED);

请务必阅读wiki

票数 1
EN

Stack Overflow用户

发布于 2016-11-02 08:26:11

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

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

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

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

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

I=F*V

I是单位矩阵。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40356285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档