응애맘마조

230522 강의 본문

공부/3D강의

230522 강의

TH.Wert 2023. 5. 22. 19:29

선형 보간에 대해서 배웠습니다. 주말 과제로 가위바위보를 만들었는데 이때 손가락 모양에서 관절이 꺾이거나 구부러질 때 경우에 사용합니다. 과제 풀이가 강의였습니다.

#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);
    }
}

코드입니다. 시간상 따로 클래스로 분류하지 않고 메인에 직접 했습니다.

 

읽어주셔서 감사합니다.

'공부 > 3D강의' 카테고리의 다른 글

230524 강의  (0) 2023.05.24
230523 강의  (0) 2023.05.23
230519 강의  (0) 2023.05.19
230518 강의  (0) 2023.05.18
230517 강의  (0) 2023.05.17