如何以形状/多边形形式渲染图像?

时间:2011-07-09 00:45:02

标签: c++ image rendering shape sfml

嘿,我现在正在使用SFML,在完成教程后,我仍然不知道如何为形状提供纹理或图像,而不仅仅是纯色/轮廓。

我所知道的唯一可以拍摄图像的是精灵,但这很简单,因为它只允许你以矩形方式渲染矩形图像!

将图像渲染到形状上的技术是什么?仅仅是在形状内部?如果你们中的一些人可以提供一些资源或特定于SFML的东西,那将会很棒!

2 个答案:

答案 0 :(得分:1)

<强> 2D:

据我所知,使用SFML 1.6时,无法使用单独的图像作为掩码。但是,您可以使用图像的Alpha通道从中绘制“形状”。默认情况下支持此功能;只是给你的图像一个alpha通道。

This post on the SFML forms验证不支持使用单独的图像作为掩码。

SFML的作者Laurent Gomila发布了一些代码,允许您使用形状,精灵和字符串进行掩码。这可以在这里找到:Masking using Sprites, Shapes or Strings。但是,要使其正常工作,您需要修改并重新编译SFML的某些部分。

<强> 3D:

关于将图像用作纹理并将其映射到3d空间中的对象,我不认为除了为您设置窗口之外,SFML还有太多帮助您。但是有一个project on Google Code called sf3d可能会让你朝着正确的方向前进。

答案 1 :(得分:0)

自从最初回答此问题以来,SFML已更新,您现在可以轻松地向形状添加纹理。 shape类具有setTexture()setTextureRect()方法。 setTexture()获取指向sf::Texture的指针。参见documentation

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 ));