응애맘마조
230602 강의 본문
회전값에 대한 보간과 이미지의 투명도와 관련된 것과 관련해서 강의를 했습니다.
#pragma once
class Scene2 : public Scene
{
private:
Camera* Cam;
Grid* grid;
Actor* player;
Actor* plane;
Actor* dead;
Vector3 src, dest;
float t;
float dis;
float srcR, destR;
float tR;
float disR;
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;
};
#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;
Cam->width = App.GetWidth();
Cam->height = App.GetHeight();
Cam->viewport.width = App.GetWidth();
Cam->viewport.height = App.GetHeight();
grid = Grid::Create();
player = Actor::Create();
player->LoadFile("Human.xml");
player->Find("SpearSoket")->rotation.x = -PI * 0.25f;
dead = Actor::Create();
dead->LoadFile("Deadpool.xml");
plane = Actor::Create();
plane->LoadFile("Plane.xml");
t = 1.0f;
tR = 1.0f;
}
void Scene2::Release()
{
Cam->Release();
}
void Scene2::Update()
{
Camera::main->width = App.GetWidth();
Camera::main->height = App.GetHeight();
Camera::main->viewport.width = App.GetWidth();
Camera::main->viewport.height = App.GetHeight();
Camera::ControlMainCam();
//debug
ImGui::Text("FPS: %d", TIMER->GetFramePerSecond());
//Hierarchy
ImGui::Begin("Hierarchy");
grid->RenderHierarchy();
player->RenderHierarchy();
Cam->RenderHierarchy();
dead->RenderHierarchy();
plane->RenderHierarchy();
ImGui::End();
if (INPUT->KeyDown(VK_RBUTTON))
{
Ray CamToMouseRay;
CamToMouseRay = Util::MouseToRay(INPUT->position, Camera::main);
Vector3 hit;
if (plane->Intersect(CamToMouseRay, hit))
{
src = dead->GetWorldPos();
dest = hit;
t = 0.0f;
Vector3 disV = dest - src;
dis = disV.Length();
srcR =dead->rotation.y + PI * 0.5f;
destR = -atan2f(disV.z, disV.x);
disR = 0.0f;
tR = 0.0f;
}
}
if (t < 1.0f)
{
t += DELTA * 10.0f / dis ;
dead->SetWorldPosX(Util::Lerp(src, dest, t).x);
dead->SetWorldPosZ(Util::Lerp(src, dest, t).z);
}
if (tR < 1.0f)
{
dead->rotation.y = Util::LerpRotation(srcR, destR, tR, disR) - PI *0.5f;
tR += DELTA * 3.14f / disR;
}
Cam->Update();
grid->Update();
player->Update();
dead->Update();
plane->Update();
}
void Scene2::LateUpdate()
{
}
void Scene2::Render()
{
Camera::main->Set();
grid->Render();
player->Render();
dead->Render();
plane->Render();
}
void Scene2::PreRender()
{
}
void Scene2::ResizeScreen()
{
Cam->width = App.GetWidth();
Cam->height = App.GetHeight();
Cam->viewport.width = App.GetWidth();
Cam->viewport.height = App.GetHeight();
}
헤더와 cpp 파일입니다. 오른쪽 마우스 클릭을 하면 가장 빠른 방향에 맞춰서 돌고 일직선으로 클릭 위치로 이동하게 됩니다.
읽어주셔서 감사합니다. 과제 내용도 이와 같습니다.