c++ - SFML 纹理变换(放大)

标签 c++ sfml

#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;
}

我想做的是当屏幕比图像大时,将纹理拉伸(stretch)到屏幕的全尺寸。使用 setTextureRect 我所取得的一切都是将最后一个像素拉伸(stretch)到新的大小,这对于我正在尝试做的事情来说并不是一个很好的外观,因为图像调整大小已被删除,有没有人知道调整图像大小或转换纹理的工作大小/尺度?

最佳答案

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

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

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

关于c++ - SFML 纹理变换(放大),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52643524/

相关文章:

c++ - 等效于 Linux 上的 SetThreadPriority (pthreads)

c++ - 语法 `const char (&x)[]` 的含义

C++ 在 GCC 上使用删除的函数,但在 MSVC 上不使用

c++ - 两个类的前向声明会导致构造函数中的循环依赖吗?

c++ - 不能使用我自己的使用 SFML 的 DLL

c++ - 如何调用在另一个文件中找到的函数?

c++ - Map.erase() 抛出错误,为什么?

c++ - 访问冲突写入位置 0x00000000。 C++/SFML游戏

c++ - 多个 Cmake 文件和 SFML "fatal error: SFML/Graphics.hpp: No such file or directory"

c++ - 数组反向 - XOR 比使用临时对象切换慢