SFML渲染纹理:无法绘制到负坐标

时间:2017-11-20 21:19:28

标签: c++ c++14 sfml

我试图将瓷砖的等轴测图绘制到RenderTexture。问题是我在RenderTexture中绘制到负坐标的任何内容都没有显示,这意味着整个地图被切成两半。

Screenshot

显示问题的简单示例。

sf::RenderTexture renderTexture;
renderTexture.create(64 * width, 32 * height);

sf::RectangleShape rectangleShape(sf::Vector2f(100, 100));
rectangleShape.setFillColor(sf::Color::Red);
rectangleShape.setPosition(-50, -50);
renderTexture.draw(rectangleShape);

renderTexture.display();

sf::Sprite sprite1;
sprite1.setPosition(0, 0);
sprite1.setTexture(renderTexture.getTexture());

window.draw(sprite1);

仅显示矩形形状的1/4。有没有办法解决这个问题而不会抵消我的整个地图(以及所有实体),所以它只能在正坐标中?

1 个答案:

答案 0 :(得分:2)

感谢您建议使用View,0x5453!

如果有其他人遇到这个问题,继续我的解决方案;

sf::RenderTexture renderTexture;
renderTexture.create(tilesize * mapWidth, tilesize * mapHeight);
sf::View view = renderTexture.getView();
view.setCenter(0, 0);
renderTexture.setView(view);

// Draw stuff to the renderTexture

renderTexture.display();
sf::Sprite sprite;
sprite.setTexture(renderTexture.getTexture());
sprite.setPostion(-(width*tilesize)/2), -(width*tilesize)/2)
window.draw(sprite);

非常简化,但这就是它的要点。

基本上将渲染纹理的中心设置为屏幕坐标(0,0)。然后在渲染之前将其抵消。