응애맘마조

230511 강의 본문

공부/3D강의

230511 강의

TH.Wert 2023. 5. 11. 22:50

어제의 그리드에 이어서 구체를 그리드 위에 올리는 것에 대해 했었습니다.

어제의 게시글에도 작성을 해뒀지만 각 격자 간의 거리는 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 파일입니다.

 

읽어주셔서 감사합니다.

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

230516 강의  (0) 2023.05.16
230512 강의  (0) 2023.05.14
230510 강의  (0) 2023.05.11
230509 강의  (0) 2023.05.09
230508 강의  (2) 2023.05.08