DirectX精灵在缩放时呈现在不同的位置
DirectX Sprite renders in a different position when scaled
目前正在为一款游戏制作一些UI类和UI元素,并且在使用DirectX 9缩放精灵时遇到了一个问题。
现在我有一个ID3DXSprite*
对象(m_barImage
),它是一个生命条。显然,随着玩家生命值的变化,生命条需要变长/变短。
我在Update()
函数中有这个
// Calculate the width of the bar taking into account the health amount
float width = (m_maxWidth / 100.0f) * m_percentageFull;
// compare last width with m_currentWidth to get a scaling ratio
float resizeRatio = width / m_currentWidth;
m_currentWidth = width;
Matrix scaleMatrix;
D3DXMatrixScaling(&scaleMatrix, resizeRatio, 1.0f, 1.0f);
m_barImage->SetTransform(&scaleMatrix);
在我的Render()
函数中我有
m_barImage->Begin(NULL);
m_barImage->Draw(m_texture, NULL, NULL, &m_position, 0x007F17);
m_barImage->End();
我的问题是,当我在X轴上缩小精灵的大小时,精灵被渲染的位置会向左移动。
注意:m_position
是在构造函数中设置的精灵的位置,它不会改变
缩放精灵时改变了它呈现的位置。
有人能帮忙吗?
我认为你应该多读一些关于矩阵变换的基础知识。
通过设置变换矩阵,你正在缩放整个坐标空间,因此你的位置也受到缩放的影响,这导致了不必要的移动。你应该让绘图调用的位置保持自由,并使用平移矩阵(将其移动到正确的位置)乘以缩放矩阵(调整大小)来转换精灵。因此,在精灵移动之前调整大小,因此缩放不会应用于平移。
有关转换的更多详细信息,请查看以下文档
相关文章:
- 将值指定给向量(2D)的向量中的某个位置
- 使用Unreal C++获取VR耳机的世界位置/方向
- 写入位置0x0000000C时发生访问冲突
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 在不同位置渲染相同精灵的数组
- 在鼠标位置移动精灵
- 更新函数之间精灵的位置
- 如何获得精灵的实际位置并将其打印在C 和SFML中
- 如何根据鼠标位置旋转精灵
- 将聚焦的精灵逐渐移动到目标位置(C++和SFML)
- 使用日程表功能更新精灵位置
- 未在指定位置绘制的精灵
- C++ SFML 精灵位置在功能中时不会更新
- 精灵旋转偏移不会停留在它所属的位置。(SDL)
- C++SFML 1.6精灵位置与鼠标
- 更新精灵位置的奇怪行为
- 在不改变精灵位置的情况下缩放资产
- cocos2dx精灵设置位置错误
- DirectX精灵在缩放时呈现在不同的位置
- 如何使用精灵解析器获得错误位置