응애맘마조
230522 강의 본문
선형 보간에 대해서 배웠습니다. 주말 과제로 가위바위보를 만들었는데 이때 손가락 모양에서 관절이 꺾이거나 구부러질 때 경우에 사용합니다. 과제 풀이가 강의였습니다.
#pragma once
class Scene2 : public Scene
{
private:
Camera* Cam;
Actor* hand[3];
Actor* player;
Grid* grid;
int src, dest;
float t = 0.0f;
public:
Scene2();
~Scene2();
virtual void Init() override;
virtual void Release() override; //해제
virtual void Update() override;
virtual void LateUpdate() override;//갱신
virtual void Render() override;
virtual void PreRender() override;
virtual void ResizeScreen() override;
void Animation(GameObject* root);
};
#include "stdafx.h"
#include "Solar.h"
#include "Scene2.h"
Scene2::Scene2()
{
}
Scene2::~Scene2()
{
}
void Scene2::Init()
{
Cam = Camera::Create();
Cam->LoadFile("Cam.xml");
Camera::main = Cam;
grid = Grid::Create();
hand[0] = Actor::Create();
hand[0]->LoadFile("sisser.xml");
hand[0]->Update();
hand[1] = Actor::Create();
hand[1]->LoadFile("rock.xml");
hand[1]->Update();
hand[2] = Actor::Create();
hand[2]->LoadFile("paper.xml");
hand[2]->Update();
player = Actor::Create();
player->LoadFile("rock.xml");
src = dest = 1;
t = 1.0f;
}
void Scene2::Release()
{
Cam->SaveFile("Cam.xml");
Cam->Release();
}
void Scene2::Update()
{
Camera::ControlMainCam();
//debug
ImGui::Text("FPS: %d", TIMER->GetFramePerSecond());
//Hierarchy
ImGui::Begin("Hierarchy");
grid->RenderHierarchy();
player->RenderHierarchy();
Cam->RenderHierarchy();
ImGui::End();
if (INPUT->KeyDown('1'))
{
dest = 0;
t = 0.0f;
}
if (INPUT->KeyDown('2'))
{
dest = 1;
t = 0.0f;
}
if (INPUT->KeyDown('3'))
{
dest = 2;
t = 0.0f;
}
if (t < 1.0f)
{
Animation(player);
t += DELTA;
if (t >= 1.0f)
{
t = 1.0f;
src = dest;
}
}
Cam->Update();
grid->Update();
player->Update();
Cam->scale.x;
Cam->rotation.x;*/
}
void Scene2::LateUpdate()
{
}
void Scene2::Render()
{
Camera::main->Set();
grid->Render();
player->Render();
}
void Scene2::PreRender()
{
}
void Scene2::ResizeScreen()
{
}
void Scene2::Animation(GameObject* root)
{
GameObject* _src = hand[src]->Find(root->name);
GameObject* _dest = hand[dest]->Find(root->name);
root->SetLocalPos(Util::Lerp(_src->GetLocalPos(),
_dest->GetLocalPos(),t));
root->rotation = Util::Lerp( _src->rotation, _dest->rotation, t);
for (auto it = root->children.begin();
it != root->children.end(); it++)
{
Animation(it->second);
}
}
코드입니다. 시간상 따로 클래스로 분류하지 않고 메인에 직접 했습니다.
읽어주셔서 감사합니다.