Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在SDL2上向纹理添加阴影?_C++_Sdl 2 - Fatal编程技术网

C++ 如何在SDL2上向纹理添加阴影?

C++ 如何在SDL2上向纹理添加阴影?,c++,sdl-2,C++,Sdl 2,所以,我正在做一个2D游戏,我有一些纹理。我希望他们中的一些人投下阴影,在css for SDL2中有类似投下阴影的东西?首先渲染纹理,然后在纹理后面稍微渲染一个稍大的半透明灰色正方形。如果您想要圆角,.既然还没有人提到过,这里就是: int SDL_SetTextureColorMod(SDL_Texture* texture, Uint8 r, Uint8

所以,我正在做一个2D游戏,我有一些纹理。我希望他们中的一些人投下阴影,在css for SDL2中有类似投下阴影的东西?

首先渲染纹理,然后在纹理后面稍微渲染一个稍大的半透明灰色正方形。如果您想要圆角,.

既然还没有人提到过,这里就是:

int SDL_SetTextureColorMod(SDL_Texture* texture,
                           Uint8        r,
                           Uint8        g,
                           Uint8        b)

此函数用于在将纹理颜色通道复制到SDL_渲染器*时倍增纹理颜色通道。使用0作为r、g和b参数将使纹理变黑,但不会影响alpha,因此纹理将保持其形状(如透明PNG)。你只需要在纹理前(后)复制阴影,稍微偏移。您还可以使用
SDL\u settexturerealphamod(SDL\u Texture*Texture,Uint8 a)

完成后,不要忘记将值设置回255


代码示例:

SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
SDL_RenderClear(renderer);
// [...] draw background, etc... here

SDL_Rect characterRect;
// [...] fill the rect however you want
SDL_Rect shadowRect(characterRect);
shadowRect.x += 30; // offsets the shadow
shadowRect.y += 30;

SDL_SetTextureColorMod(characterTexture, 0, 0, 0);                // makes the texture black
SDL_SetTextureAlphaMod(characterTexture, 191);                    // makes the texture 3/4 of it's original opacity      
SDL_RenderCopy(renderer, characterTexture, NULL, &shadowRect);    // draws the shadow
SDL_SetTextureColorMod(characterTexture, 255, 255, 255);          // sets the values back to normal
SDL_SetTextureAlphaMod(characterTexture, 255);
SDL_RenderCopy(renderer, characterTexture, NULL, &characterRect); // draws the character

// [...] draw UI, additionnal elements, etc... here
SDL_RenderPresent(renderer);

可能是另一个看起来像阴影的纹理。但是我怎么能制作这个纹理呢?我会喜欢阴影有相同的形状,你可以画它,或写代码为你画哦哇,这看起来真的很好。我不知道我应该如何使用SDLEdit您的问题与您当前的代码。您可能需要使用OpenGL着色器。所以我没有这方面的代码,我只是画一个矩形。在未来,我将使用png代替。我只是在研究,用灰色的长方形来伪装。以后再把它弄得更漂亮。请参阅和该系列教程的其余部分