我目前正在用SDL2编写一个简单的程序,你可以把一些形状(正方形,圆形,三角形等)拖到画布上,旋转和移动它们。每个形状都由一个从PNG文件创建的SDL纹理可视化地表示(使用SDL_image库中的IMG_LoadTexture函数)。
问题是,我想知道纹理中的某个像素是否透明,这样当有人点击图像时,我就可以确定我是否必须做一些操作(因为点击是在不透明的区域)还是不。因为这是一些学校作业我面临一些限制,就是,我只使用SDL2库,而且我不能有一些Map来查找有问题的像素是否透明,因为图像是动态选择的。此外,我考虑使用SDL表面为这个任务创建他们从原始图像,但由于事实上,形状是通过纹理旋转,这将不工作。
2条答案
按热度按时间kyvafyod1#
您可以使用Render Targets来完成此操作。
在最后一步中,你使用SDL_RenderReadPixels从渲染目标读取像素,然后你必须弄清楚所需像素的alpha通道是否为零(透明)。你可以只从渲染目标读取一个像素,或者整个纹理,你选择哪个选项取决于你必须执行的点击测试的数量,纹理旋转/移动的频率等等。
dxxyhpgq2#
您需要使用SDL_TEXTUREACCESS_STREAMING标志创建纹理并锁定纹理,然后才能操作像素数据。要判断纹理中的某个像素是否透明,请确保调用
这允许纹理识别阿尔法通道。
试试这样的方法:
如果你有任何问题,请随时问。虽然我不是这个主题的Maven。
要获得更多的阅读和教程,请查看http://lazyfoo.net/tutorials/SDL/index.php。教程40专门处理像素操作。
如果在方法名称中有任何错误,我向您道歉(我已经把这些写在脑子里了)。
希望这个有用。