【问题标题】:SDL_Texture opacitySDL_纹理不透明度
【发布时间】:2013-12-17 16:24:39
【问题描述】:

如何更改 SDL_Texture 的不透明度?而且我不知道如何在我的函数中应用不透明度数。

我的代码

    void drawTexture(SDL_Texture *img, int x, int y, int width, int height, double opacity)
    {
        SDL_Rect SrcR;
        SDL_Rect DestR;

        SrcR.x = 0;
        SrcR.y = 0;
        SrcR.w = width;
        SrcR.h = height;

        DestR.x = x;
        DestR.y = y;
        DestR.w = width;
        DestR.h = height;

        SDL_RenderCopy(_main::_main_renderer, img, &SrcR, &DestR);
    }

【问题讨论】:

    标签: c++ sdl sdl-2


    【解决方案1】:

    使用SDL_SetTextureAlphaMod:

    SDL_SetTextureAlphaMod(img, opacity);
    

    这将设置纹理的不透明度(alpha),alpha 值必须是从0(完全透明,也就是不可见)到255(完全不透明)的Uint8

    【讨论】:

    • 谢谢,但不透明度必须为 0-255。
    • 在这种情况下,您可以像这样将它传递给函数:SDL_SetTextureAlphaMod(img, opacity / 255.0);
    • @xorguy:你错了。 opacity 必须是一个无符号整数,所以从 0 到 255。将使用这个公式:srcA = srcA * (opacity / 255)
    【解决方案2】:

    Opening question 没有关于 img 纹理来源的信息,因此选择的答案不能纠正纹理是从没有 Alpha 的原始像素数据创建的,即使用此:

    SDL_UpdateTexture(img, NULL, pixels, pitch);
    

    如果 pixels 包含不带 alpha 的原始像素数据,即带有 A 0x00 的 ARGB,即使您这样做

    SDL_UpdateTexture(img, NULL, pixels, pitch);
    SDL_SetTextureAlphaMod(img, opacity);
    

    您将看不到纹理(在这种情况下 alpha 为 0x00),否则您将看到垃圾

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-03
      • 2015-03-20
      • 2013-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多