有关图片裁剪的问题,求大神指导一下思路
sdl吧
全部回复
仅看楼主
level 2
冰咖i啡 楼主
最近再用SDL2来做一款游戏,有一个问题没有思路怎么解决,应该说是没找到接口?哈哈
场景的话是做一个视野限制的功能,就是在玩家只能看到角色周围一定范围内的东西,其他的都要隐藏隐藏起来。
需要在一个平面上,只渲染部分区域的内容,想过调整alpha,但是也不清楚怎么调整特定区域的alpha
文字描述不够情绪,我直接上图
咨询过其他人,他不太了解SDL2,但是说应该是通过裁剪或者传输给屏幕限定展示范围来做,让我搜一下stencil buffer关键字
但是SDL的裁剪我只找到精灵图相关的,是图片素材处理的
限定展示范围的也没有找到什么相关内容,求助一下贴吧大佬,麻烦是否可以指导一下思路
2019年07月09日 08点07分 1
level 7
没做过游戏,但是SDL2会一点。说说我的想法吧:
1、创建一个像素格式为SDL_PIXELFORMAT_ARGB8888(或其他的带Alpha通道的格式),访问模式为SDL_TEXTUREACCESS_TARGET,且和屏幕一样大的Texture,姑且称这个纹理为“遮挡纹理”,就是你图上的黑色的那层。
2、设置“遮挡纹理”的混合模式, SDL_SetTextureBlendMode(SDL_BLENDMODE_BLEND)
3、使用 SDL_SetRenderTarget,把“遮挡纹理”设置为当前渲染纹理。
4、使用 SDL_SetRenderDrawColor(0, 0, 0, 255) 和 SDL_RenderFillRect 填充整个黑色,ALPHA = 255
5、开始画可视范围,先把ALPHA设置为透明 SDL_SetRenderDrawColor(0, 0, 0, 0)。
6、使用SDL_RenderDrawPoint(x, y)开始画形状,画圆或角色的视锥,随你开心。
如果对计算机图形有点头疼,可以去下载 ferzkopp SDL2_GFX 里面提供了几何绘画。
7、SDL_SetRenderTarget(NULL)重置当前渲染纹理为屏幕
8、SDL_RenderCopy(“遮挡纹理”)
9、SDL_RenderPresent
1、2为创建过程,3到9重复的执行。
:)
2019年07月09日 14点07分 2
你好,是说将我需要的图形内容全部传给render之后(比如下面白板的元素,有调用SDL_RenderCopy来将纹理交给render) 再执行上述步骤,创建一个“遮挡纹理”,设为render当前纹理并操作是吗? 这样是不会影响之前已经copy过去的纹理是吗?还没了解底层的机制,就怕影响之前的纹理内容
2019年07月11日 11点07分
@冰咖i啡 SDL_SetRenderTarget 设置成“遮挡纹理” 后不会影响其他的纹理或画面,但在完成绘制后需要SDL_SetRenderTarget(NULL)还原,再进行SDL_RenderCopy("遮挡纹理"),就会把“遮挡纹理”覆盖到屏幕。
2019年07月12日 05点07分
@冰咖i啡 你游戏的所有内容先绘制到“离屏纹理”,把离屏纹理COPY到屏幕,再COPY“遮挡纹理”到屏幕覆盖。不要直接操作render的屏幕纹理
2019年07月12日 05点07分
@小二郎998 我按照提示进行编写,在操作”遮挡纹理“的过程当中,发现SDL_RenderFillRect是可以达成修改纹理透明度的效果
2019年07月18日 05点07分
level 3
是不是可以做一张带Alpha的图,加载进去之后,设置textureMod为blend,混合到屏幕上去呢。
中间的部分alpha为0,边上黑的部分,alpha为0xff,RGB都为0.
2020年02月08日 14点02分 3
1