我有一个精灵,一个正方形,仅用于正交投影。现在我想以一种非常基本的,简单的等距方式投影它。 (我知道这可能不太漂亮,但我只是想弄清楚这一点)
鉴于我的方格,我将它旋转45度。现在,如果我理解正确,我仍然应该将我的身高除以2.这在SFML中是不可能的。有一个比例函数但是如果我在y轴方向上以0.5倍缩放,我的立方体就会被拉伸,而不是钻石形状。看起来SFML根据它自己的相对轴(在...之前旋转)来转换精灵。
由于你无法访问精灵的高度,我想知道这是否可能?
我可以在SFML中将方形精灵转换为菱形吗?
答案 0 :(得分:5)
使用sf :: RenderTexture是一个选项(参见other answer)。另一种选择是摆弄sf::View
。将视图的高度加倍,并调整坐标。它会是这样的:
my_sprite.setRotation(45.f);
//adjust the position for new screen coordinates (once)
my_sprite.setPosition(my_sprite.getPosition().x, my_sprite.getPosition().y * 2);
//...
//when drawing:
sf::View v = my_render_window.getDefaultView();
v.setSize(v.getSize().x, v.getSize().y * 2);
v.setCenter(v.getSize() *.5f);
my_render_window.setView(v);
my_render_window.draw(my_sprite);
my_render_window.setView(my_render_window.getDefaultView());
答案 1 :(得分:1)
像现在一样旋转你的精灵。将其渲染为sf::RenderTexture。使用成员函数getTexture
,并从中创建一个新的精灵,或重用旧的精灵。沿y轴缩放精灵。将其绘制到渲染窗口。
为了将RenderTexture
设置为正确的大小并在原始精灵上绘制正确的精灵,可能需要您进行一些数学运算。
original_sprite.setRotation(45);
sf::RenderTexture rt;
rt.create(FigureOutWidth(),FigureOutHeight());
original_sprite.setPosition(MoreMathHere());
rt.draw(original_sprite);
sf::Sprite new_sprite(rt.getTexture());
new_sprite.setScale(1.0,0.5);
不言而喻,但是在初始化时,不是每一帧都这样做。