0. SpriteShader.hlsl
- uv 값에 curFrame 값 적용
더보기
cbuffer Frame : register(b0)
{ // 상수버퍼는 전달할 때 16byte로 맞춰야 한다!
float2 maxFrame;
float2 curFrame;
}
//
Texture2D map : register(t0);
SamplerState samp : register(s0);
struct PixelInput
{
float4 pos : SV_Position;
float2 uv : UV;
};
float4 PS(PixelInput input) : SV_TARGET
{
float2 uv;
//
uv.x = (input.uv.x / maxFrame.x) + (curFrame.x / maxFrame.x);
uv.y = (input.uv.y / maxFrame.y) + (curFrame.y / maxFrame.y);
//
return map.Sample(samp, uv);
}
1. Animation class
- 기존 Animaiton class에서 maxFrame을 가져오는 위치만 수정 ( Texture -> sprite->frameBuffer )
더보기
// 1. 생성자 수정 ( Texture* -> Sprite* )
Animation::Animation(Sprite* sprite, double frameUpdateSec)
: time(0), frameUpdateSec(frameUpdateSec), play(false),
loop(false), pingpong(false), EndEvent(nullptr),
EndEventInt(nullptr), nextAction(0), curPlayNum(0)
{
// 2. maxFrame에 접근하는 코드 수정 ( Texture -> frameBuffer )
maxFrame.x = sprite->GetFrameBuffer()->data.maxFrame.x;
maxFrame.y = sprite->GetFrameBuffer()->data.maxFrame.y;
// 이하 생략
}
2. Render()
- animation에 저장되어있는 curFrame 값을 frameBuffer에 입력
- curFrame이 SpriteShader를 통해 전달되어 texture의 특정 위치 출력
더보기
void Player::Render()
{
// curFrame에서 현재 프레임값을 가져와서 frameBuffer에 입력
Float2 curAnimFrame = Float2(curAction->GetFrame().x, curAction->GetFrame().y);
sprite->GetFrameBuffer()->data.curFrame = curAnimFrame;
//
sprite->Render();
collider->Render();
}
'DX11 2D Game Programming' 카테고리의 다른 글
DX11_2020_0806_목_FX (0) | 2020.08.05 |
---|---|
DX11_2020_0730_목_Animation(XML) (0) | 2020.07.30 |
DX11_2020_0728_화_Collider Offset (0) | 2020.07.28 |
DX11_2020_0727_월_Collision(OBB_Circle) (0) | 2020.07.27 |
DX11_2020_0724_금_ImGui & Collision (0) | 2020.07.24 |