【发布时间】:2011-10-01 16:42:53
【问题描述】:
嘿,我现在正在使用 SFML,在完成教程后,我仍然不知道如何为形状赋予纹理或图像,而不仅仅是纯色/轮廓。
我知道唯一可以拍摄图像的是精灵,但这很简单,因为它只允许您以矩形方式渲染矩形图像!
将图像渲染到形状上的技术是什么,并且只在形状内部?如果你们中的一些人可以提供一些资源或特定于 SFML 的东西,那就太好了!
【问题讨论】:
标签: c++ image rendering shape sfml
嘿,我现在正在使用 SFML,在完成教程后,我仍然不知道如何为形状赋予纹理或图像,而不仅仅是纯色/轮廓。
我知道唯一可以拍摄图像的是精灵,但这很简单,因为它只允许您以矩形方式渲染矩形图像!
将图像渲染到形状上的技术是什么,并且只在形状内部?如果你们中的一些人可以提供一些资源或特定于 SFML 的东西,那就太好了!
【问题讨论】:
标签: c++ image rendering shape sfml
自从最初回答了这个问题以来,SFML 已经更新,您现在可以轻松地为形状添加纹理。形状类具有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 ));
【讨论】:
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 可能会让你朝着正确的方向前进。
【讨论】: