Как визуализировать изображения в форме / форме многоугольника? - PullRequest
2 голосов
/ 09 июля 2011

Привет, я сейчас работаю с SFML, и после окончания обучения я все еще не знаю, как придать фигуре текстуру или изображение, а не только сплошной цвет / контур.

Единственное, что я знаю, может взять изображение, это спрайт, но это просто, так как позволяет вам только рендерить прямоугольные изображения прямоугольным способом!методы для рендеринга изображений на фигуры, и ТОЛЬКО внутри фигуры? Было бы здорово, если бы некоторые из вас могли предоставить некоторые ресурсы или материал, специфичный для SFML!

Ответы [ 2 ]

1 голос
/ 09 июля 2011

2d:

Насколько я знаю, в SFML 1.6 невозможно использовать отдельное изображение в качестве маски.Однако вы можете использовать альфа-канал изображения, чтобы нарисовать из него «фигуру».Это поддерживается по умолчанию;просто дайте вашему изображению альфа-канал.

Этот пост в формах SFML подтверждает, что использование отдельного изображения в качестве маски не поддерживается.

Автор SFMLЛоран Гомила опубликовал код, который позволит вам маскировать фигуры, спрайты и строки.Это можно найти здесь: Маскировка с использованием спрайтов, фигур или строк .Однако, чтобы это работало, вам нужно изменить и перекомпилировать некоторые части SFML.

3d:

Что касается использования изображения в качестве текстуры и его отображениячто касается объекта в трехмерном пространстве, я не думаю, что SFML может помочь вам в этом, кроме настройки окна для вас.В коде Google есть проект , который называется sf3d , но, возможно, он поможет вам в правильном направлении.

0 голосов
/ 23 декабря 2018

SFML был обновлен с момента первоначального ответа на этот вопрос, и теперь вы можете легко добавлять текстуры к фигурам. Класс shape имеет методы setTexture() и setTextureRect(). setTexture() принимает указатель на sf::Texture. См. документацию .

Sf::Texture texture;
if (!texture.loadFromFile("mytexture.png"))
{
    std::cerr << "failed to load";
}
sf::RectangleShape myRect{ sf::Vector2f(width, height) };
myRect.setTexture(&texture);
myRect.setTextureRect(sf::IntRect( x, y, width, height ));
...