【问题标题】:SFML Texture Transforming (Enlarging)SFML 纹理变换(放大)
【发布时间】:2018-10-04 09:36:57
【问题描述】:
#include <iostream>
#include <SFML/Graphics.hpp>    

int main()
{
    int desktopwidth = sf::VideoMode::getDesktopMode().width;
    int desktopheight = sf::VideoMode::getDesktopMode().height;
    sf::ContextSettings settings;settings.antialiasingLevel = 8;
    sf::RenderWindow window(sf::VideoMode(desktopwidth, desktopheight), "Texture Transforming!", sf::Style::Fullscreen, settings);
    while (window.isOpen())
    {
        sf::Image image;
        if (!(image.loadFromFile("texture.jpg")))
            std::cout << "Cannot load image";   //Load Image
        sf::Texture texture;
        texture.loadFromImage(image);  //Load Texture from image
        sf::Sprite sprite;
        sprite.setTexture(texture);
        sprite.setTextureRect({ 0, 0, desktopwidth, desktopheight });
        window.clear();
        window.draw(sprite);
        window.display();
    }
    return 0;
}

我想要做的是当屏幕大于图像时将纹理拉伸到屏幕的全尺寸。使用 setTextureRect 我所做的只是将最后一个像素拉伸到新的大小,这对于我想要做的事情来说并不是一个很好的外观,因为图像调整大小已被删除,有没有人知道调整图像大小或转换纹理的方法大小/比例?

【问题讨论】:

标签: c++ sfml


【解决方案1】:

sf::Sprite::setTextureRect() 定义作为精灵可见的纹理部分。它没有定义实际的显示尺寸。

为此,您可能需要使用sf::Sprite::setScale(),它允许您定义缩放比例。例如,调用sprite.setScale(2, 2); 将使显示的精灵宽度/高度增加一倍。

如果您想缩小/放大整个场景,您可能需要查看sf::View

【讨论】:

    猜你喜欢
    • 2018-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    • 1970-01-01
    • 2022-08-14
    • 2015-03-13
    • 1970-01-01
    相关资源
    最近更新 更多