응애맘마조
230511 강의 본문
어제의 그리드에 이어서 구체를 그리드 위에 올리는 것에 대해 했었습니다.
어제의 게시글에도 작성을 해뒀지만 각 격자 간의 거리는 1로 해서 어떤 물체가 있던 대략적인 크기를 알 수 있습니다. 이를 이용해서 여러 개의 객체를 만들 수 있으며 노드를 관리했던 것처럼 부모 객체의 SRT를 상속받아 자녀의 노드를 만들어서 움직일 수 있도록 할 수 있습니다. 2D때 과제 중 태양계를 만들 때와 비슷한 느낌입니다.
(해당 게시글은 https://keisukeaso.tistory.com/search/%ED%83%9C%EC%96%91 여기를 참고해 주시면 됩니다.)
위의 영상처럼 만들 수 있습니다. 눈에 보이지는 않게 했지만 이 두 구체 사이에는 연결하는 관절 구조가 있습니다. 화면에 직접 보여주기 위해서 코드를 프레임워크에서 작성하지 않고 메인에서 작성했습니다.
//Scene2.h
#pragma once
class Scene2 : public Scene
{
private:
Camera* Cam;
Grid* grid;
Actor* sun;
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;
};
//Scene2.cpp
#include "stdafx.h"
Scene2::Scene2()
{
}
Scene2::~Scene2()
{
}
void Scene2::Init()
{
Cam = Camera::Create();
grid = Grid::Create();
sun = Actor::Create();
sun->mesh = make_shared<Mesh>();
sun->mesh->LoadFile("1.Sphere.mesh");
sun->SetWorldPos(Vector3(0, 5, 10));
sun->Update();
{
GameObject* temp = GameObject::Create("Mercury");
temp->mesh = make_shared<Mesh>();
temp->mesh->LoadFile("1.Sphere.mesh");
temp->SetLocalPos(Vector3(0, 0, 10));
GameObject* temp2 = GameObject::Create("MercuryBorn");
sun->AddChild(temp2);
temp2->AddChild(temp);
}
Camera::main = Cam;
}
void Scene2::Release()
{
Cam->Release();
grid->Release();
sun->Release();
}
void Scene2::Update()
{
Camera::ControlMainCam();
//debug
ImGui::Text("FPS: %d", TIMER->GetFramePerSecond());
//Hierarchy
ImGui::Begin("Hierarchy");
grid->RenderHierarchy();
Cam->RenderHierarchy();
sun->RenderHierarchy();
ImGui::End();
sun->Find("MercuryBorn")->rotation.y += DELTA * 3.14;
Cam->Update();
grid->Update();
sun->Update();
}
void Scene2::LateUpdate()
{
}
void Scene2::Render()
{
Cam->Set();
grid->Render();
sun->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 파일입니다.
읽어주셔서 감사합니다.