응애맘마조

230711 강의 본문

공부/3D강의

230711 강의

TH.Wert 2023. 7. 11. 20:50

어제 맵과 캐릭터를 로드하는 것을 했고 여기에 경사면이 크면 올라가지 못하게 하려는 것을 하려고 했는데 이 부분은 구현에 실패했고 접선면의 노멀과 각도를 구하는 것을 했었습니다.

#pragma once

class Scene2 : public Scene
{
private:
	Grid*	grid;
	Actor*  map;
	class Deadpool* dead;
    
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 "Deadpool.h"
#include "Scene2.h"

Scene2::Scene2()
{
}

Scene2::~Scene2()
{
}

void Scene2::Init()
{
    grid =  Grid::Create();
    
    map = Actor::Create();
    map->LoadFile("Terrain.xml");

    dead = new Deadpool();
    dead->Init();

    Camera::main = (Camera*)dead->root->Find("Cam");
}

void Scene2::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();

    //debug
    ImGui::Text("FPS: %d", TIMER->GetFramePerSecond());
    ImGui::SliderFloat(" App.deltaScale", &App.deltaScale,0.0f,10.0f);

    //Hierarchy
    ImGui::Begin("Hierarchy");
    grid->RenderHierarchy();
    dead->Hi();
    map->RenderHierarchy();
    ImGui::End();
   
    map->Update();
    grid->Update();
    dead->Update();
}

void Scene2::LateUpdate()
{
    Vector3 HitPoint; Vector3 HitNormal;
    //////이용하여 맵 안에서 돌아다닐수있는 캐릭터 구현하기
    if (Util::RayIntersectMap(dead->GetRay(),
        map->Find("Actor"), HitPoint, HitNormal))
    {
        dead->root->SetWorldPosY(HitPoint.y);
        float xz = sqrt(HitNormal.x * HitNormal.x + HitNormal.z * HitNormal.z);
        cout << atan2f(HitNormal.y, xz) / TORADIAN<< endl;
    }
    else
    {
        cout << "충돌아님" << endl;
    }
}

void Scene2::Render()
{
    Camera::main->Set();

    BLEND->Set(false);
    grid->Render();
    dead->Render();
    map->Render();
}

void Scene2::PreRender()
{
}

void Scene2::ResizeScreen()
{
    Camera::main->width = App.GetWidth();
    Camera::main->height = App.GetHeight();
    Camera::main->viewport.width = App.GetWidth();
    Camera::main->viewport.height = App.GetHeight();
}

Main의 헤더와 cpp 파일입니다. LateUpdate의 아크 탄젠트를 사용해서 각 타일 접선면의 노멀 각도를 구하고 이를 이용해서 맵 안에서 돌아다닐 수 있는 캐릭터를 구현하였습니다.

 

읽어주셔서 감사합니다.

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

230713 강의  (0) 2023.07.13
230712 강의  (0) 2023.07.12
230710 강의  (0) 2023.07.10
230707 강의  (0) 2023.07.07
230706 강의  (0) 2023.07.06
Comments