응애맘마조

230602 강의 본문

공부/3D강의

230602 강의

TH.Wert 2023. 6. 5. 01:24

회전값에 대한 보간과 이미지의 투명도와 관련된 것과 관련해서 강의를 했습니다.

#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 파일입니다. 오른쪽 마우스 클릭을 하면 가장 빠른 방향에 맞춰서 돌고 일직선으로 클릭 위치로 이동하게 됩니다.

 

읽어주셔서 감사합니다. 과제 내용도 이와 같습니다.

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

230607 강의  (0) 2023.06.07
회전보간  (0) 2023.06.05
230601 강의  (0) 2023.06.01
230531 강의  (0) 2023.05.31
230530 강의  (0) 2023.05.30