c++ - D3DXMatrixTransformation2D 行为怪异

标签 c++ matrix rotation directx sprite

我想在它们的位置而不是任何其他点旋转我的 2D Sprite ,但我在使用该功能时遇到了问题。

我看到人们以这种方式使用 D3DXMatrixTransformation2D(不包括缩放):

D3DXMATRIX mat;

D3DXVECTOR2 center(sprite.width / 2, sprite.height / 2);

D3DXVECTOR2 pos(sprite.x, sprite.y)

D3DXMatrixTransformation2D(
            &mat,
            NULL,
            NULL,
            NULL,
            &center,
            sprite.rotation,
            &pos);

但是这样做我的 Sprite 会围绕某个奇怪的点在一个 laaaaarge 圆圈中旋转。

我试了又试,想出了这个解决方案,但感觉它在我进一步操纵实体坐标和东西时有一些副作用。

D3DXVECTOR2 pos(sprite.x + (sprite.width / 2), sprite.y + (sprite.height / 2))

D3DXMatrixTransformation2D(
            &mat,
            NULL,
            NULL,
            NULL,
            &pos,
            sprite.rotation,
            NULL);

有什么我想念的吗?

最佳答案

如果您的图像文件的尺寸大于您尝试旋转的图像部分,可能会让您挠头一阵子。 我的意思是,如果你的图像文件是 512x512,左下角有一只小猫,只有 64x64,其余部分的 alpha 为 0,它将占据图像文件的中心,不是猫的。

如果这就是您遇到的情况,您可以将猫或任何图像移动到图像文件的中心,或者在 DirectX 中进一步查看,您可以在其中定义一个矩形并使用它作为图像文件的剪切来绑定(bind)您的图像(猫)。

关于c++ - D3DXMatrixTransformation2D 行为怪异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14992285/

相关文章:

python - 如何将自定义函数应用于 PyTorch 矩阵中的特定列

algorithm - O(n) 算法来检查字符串是否是按字典顺序最小旋转?

c++ - C++ 中的运算符 new 和 delete

c++ - 初始化 C++ 结构

c++ - 如何制作 jsoncpp 数组?

r - 如何使用 dplyr 将矩阵列转换为单独的列?

c++ - Asio 完成处理程序中的实例变量无效

r - 比较 R 中的矩阵求逆 - Cholesky 方法有什么问题?

jquery - 旋转图像并调整div的大小新图像旋转

algorithm - 向左旋转的数学等价物是什么?