์์ :)
https://github.com/eazuooz/WindowAPI/commit/11cf6ef4d4dd6621872b0d64275c8755e3a9743a
Alphablend Camera Effect · eazuooz/WindowAPI@11cf6ef
Show file tree Showing 13 changed files with 143 additions and 50 deletions.
github.com
์ด์ ์๋ ์บ๋ฆญํฐ๋ฅผ TransparentBlt์ผ๋ก ๋ฐฐ๊ฒฝ์์ผ๋ก RGB๋ฅผ ๋ฌดํจ์ฒ๋ฆฌํ์ฌ ์ถ๋ ฅํ๊ณ ์์ต๋๋ค.
์ฌ๊ธฐ์ ์บ๋ฆญํฐ๋ฅผ ํฌ๋ช ํ๊ฒ ์ถ๋ ฅํ๊ณ ์ถ๋ค๋ฉด ๋ธ๋ ๋ฉ ์ฒ๋ฆฌ๋ฅผ ํด ์ฃผ์ด์ผ ํฉ๋๋ค.
์ผ๋จ ๊ธฐ์กด์ 24bit (RGB)๊ฐ ์๋ 32bit(RGBA)๊ฐ์ผ๋ก ์ ์ฅ๋ ๋นํธ๋งต์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
A๋ ํฌ๋ช ๋ ์ฒ๋ฆฌ๋ฅผ ์ํ ๊ฐ์ผ๋ก ์ฌ์ฉ๋ ์์ ์ ๋๋ค.
์ํ๋ธ๋ ๋ฉ์ด๋ ์ํ๊ฐ์ ์ด์ฉํด
ํฌ๋ช ํ ๋ฌผ์ฒด๊ฐ ์์๋๋ ๋ค์ ๋ฌผ์ฒด ์์ ๋ํด์ฃผ์ด์ ํฌ๋ช ํ๊ฒ ๋ณด์ด๋๋ก ์ฒ๋ฆฌ๋ฅผ ํ๋ ๊ฒ์ ๋๋ค.
๋์ด๋ฏธ์ง์ค ํ๋์ ํฝ์ ๊ฐ์ ์ ์ฉํ๋๊ฒ ์๋๋ผ ๋ ์ด๋ฏธ์ง์ ํฝ์ ๊ฐ์ ์ค์๊ฐ์ ์ต์ข ํฝ์ ๊ฐ์ผ๋ก ์ผ๋ ๊ฒ์ ๋งํฉ๋๋ค.
BLENDFUNCTION func = {};
func.BlendOp = AC_SRC_OVER;
func.BlendFlags = 0;
func.AlphaFormat = AC_SRC_ALPHA;
func.SourceConstantAlpha = 127;
AlphaBlend(hdc, (int)vPos.x - mImage->GetWidth() / 2
, (int)vPos.y - mImage->GetHeight() / 2
, mImage->GetWidth(), mImage->GetHeight()
, mImage->GetHdc(), 0, 0, mImage->GetWidth(), mImage->GetHeight(), func);
๊ทธ๋ฆฌ๊ณ AlphaBlend๋ผ๋ ํจ์์ ํด๋น BLENDFUNC๋ฅผ ๋ฃ์ด์ฃผ์๊ณ ๋ ๋๋ง์ ํด์ฃผ๋ฉด ํฌ๋ช ๊ฐ์ด ๋ฐ์๋์ด ์ด๋ฏธ์ง๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค.
๊ทธ๋ผ ํด๋น ์ํ๋ธ๋ ๋ํจ์๋ฅผ ์ด์ฉํ์ฌ ์นด๋ฉ๋ผ ํ์ด๋์ธ ์์ ํจ๊ณผ๋ฅผ ํ๋ฒ ๋ฃ์ด๋ณด๊ฒ ์ต๋๋ค.
class Object;
class Image;
class Camera
{
public:
static void Initialize();
static void Tick();
static void Render(HDC hdc);
static Vector2 CalulatePos(Vector2 pos) { return pos - mDistance; }
static void SetTarget(Object* object) { mTarget = object; }
private:
Camera() = delete;
~Camera() = delete;
private:
static Size mResolution; // ํ๋ฉด ํด์๋
static Vector2 mLookPosition; // ์นด๋ฉ๋ผ๊ฐ ๋ณด๊ณ ์๋ ์ขํ
static Vector2 mDistance; // ํ๋ฉด ํด์๋ ์ค์ฌ ์ขํ์ ํ์ฌ ์นด๋ฉ๋ผ Look ๊ฐ์ ์ฐจ์ด
static Object* mTarget;
static eCameraEffect mEffect;
static Image* mCutton;
static float mCuttonAlpha;
static float mAlphaTime;
static float mEndTime;
};
void Camera::Tick()
{
if(mTarget != nullptr)
mLookPosition = mTarget->GetPos();
// Alpha 1 -> 0, 5์ด์ ๊ฑธ์ณ์
if (mAlphaTime <= 5.f)
{
mAlphaTime += Time::DeltaTime();
float fRatio = (mAlphaTime / mEndTime); // ์ ํ ์๊ฐ ๋๋น ์งํ์๊ฐ์ ๋น์จ์ 0 ~ 1 ์ฌ์ด๋ก ํ์ฐ
if (eCameraEffect::Fade_In == mEffect)
mCuttonAlpha = 1.f - fRatio;
else
mCuttonAlpha = fRatio;
}
mDistance = mLookPosition - (mResolution / 2.0f);
}
void Camera::Render(HDC hdc)
{
BLENDFUNCTION tFunc = {};
tFunc.BlendOp = AC_SRC_OVER;
tFunc.BlendFlags = 0;
tFunc.AlphaFormat = 0;
tFunc.SourceConstantAlpha = (BYTE)(255.f * mCuttonAlpha);
AlphaBlend(hdc, 0, 0
, mCutton->GetWidth(), mCutton->GetHeight()
, mCutton->GetHdc()
, 0, 0
, mCutton->GetWidth(), mCutton->GetHeight()
, tFunc);
}
'๐ Development Study > ๐ป Win32API' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Animator (1) | 2022.10.13 |
---|---|
Object Delete (0) | 2022.10.12 |
Camera (1) | 2022.10.04 |
Collider Manager (1) | 2022.09.30 |
Collider (0) | 2022.09.27 |
๋๊ธ