1

我有一个精灵,一个正方形,只是用于正交投影。现在我想以一种非常基本、简单的等距方式投影它。(我知道这可能不漂亮,但我只是想弄清楚)

给定我的正方形,我将它旋转 45 度。现在,如果我理解正确,我仍然应该将我的身高除以 2。这在 SFML 中对我来说是不可能的。有一个缩放功能,但如果我在 y 轴方向上缩放 0.5 倍,我的立方体只会被拉伸,而不是菱形。看起来 SFML 似乎根据它自己的相对轴(之前旋转过......)来转换精灵。

由于您无法访问精灵的高度,我想知道这是否可能?

我可以在 SFML 中将方形精灵转换为菱形吗?

4

2 回答 2

5

使用 sf::RenderTexture 是一种选择(请参阅其他答案)。另一种选择是摆弄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());
于 2013-01-06T07:34:54.453 回答
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);

不言而喻,但在初始化时执行一次,而不是每一帧。

于 2013-01-06T06:51:46.303 回答