1#include "../Util/Render/SEnvironmentMgr.h"
2#include "FirstDemoScene.h"
3#include "../Component/LightComponent.h"
4#include "../Component/DrawableSkinnedMeshComponent.h"
5#include "../Component/CameraComponent.h"
6#include "../../Assets/teapot_smooth.h"
7#include "../Component/RenderComponent.h"
8#include "../Component/CustomComponent.h"
9#include "../Manager/GameObjectMgr.h"
11#include "../Util/Loader/DAE/DAELoader.h"
12#include "../Util/AssetsDef.h"
13#include "../Manager/SCloneFactory.h"
14#include "../Util/Loader/SCENE/SSceneLoader.h"
15#include "../Util/Render/SFrameBuffer.h"
16#include "../Util/Render/SMaterial.h"
17#include "../Util/Loader/3DTEX/VolumeTextureGenerator.h"
21FirstDemoScene::FirstDemoScene() =
default;
24FirstDemoScene::~FirstDemoScene() =
default;
27void FirstDemoScene::Init() {
32 SPrefab* jack = SResource::Create<SPrefab>(
"jack.prefab");
33 SPrefab* plane = SResource::Create<SPrefab>(
"plane_circle.prefab");
34 SPrefab* roomPrefab = SResource::Create<SPrefab>(
"room.prefab");
65 root->GetTransform()->m_position =
vec3{0, 0, 0};
67 auto room = roomPrefab->Clone(
vec3{0, 0.2f, 0}, root);
68 room->GetTransform()->m_scale =
vec3{ 4.f, 4.f, 4.f };
71 const auto& room_children = room->GetChildren();
72 for (
const auto& gameObject : room_children) {
74 if(component ==
nullptr)
continue;
75 component->SetMaterial(SResource::Create<SMaterial>(
"File:Material/Room.mat"));
77 const auto& mesh = meshComp->GetMeshID();
89 cube =
new MeshSurface(CH02::teapot_smoothNumVerts, CH02::teapot_smoothVerts, CH02::teapot_smoothNormals);
90 cube->SetUndestroyable(
false);
94 buf_tex->SetName(
"framebuffer_test");
95 buf_tex->SetAbsoluteID(
"framebuffer_test");
100 root->AddChild(testing);
103 camera_gm->SetParent(testing);
104 camera_gm->GetTransform()->m_position =
vec3{ 0, -0.3f, 0 };
107 sc->SetClassName(
"testScript.script");
111 light_gm->SetParent(testing);
112 light_gm->GetTransform()->m_scale =
vec3{ 0.2f, 0.2f, 0.2f };
115 sc->SetClassName(
"testScriptFast.script");
119 a->SetParent(camera_gm);
123 ab->GetTransform()->m_scale =
vec3{ 0.0002f, 0.0002f, 0.0002f };
124 ab2->GetTransform()->m_scale =
vec3{ 0.0002f, 0.0002f, 0.0002f };
125 ab2->GetTransform()->m_rotation.Rotate(Quaternion::AngleAxis(
vec3{1, 0, 0}, 3.14f / 2));
126 ab2->GetTransform()->m_rotation.Rotate(Quaternion::AngleAxis(
vec3{0, 1, 0}, 1.f));
131 const auto& ab_children = ab->GetChildren();
132 for (
const auto& gameObject : ab_children) {
134 if (component ==
nullptr)
continue;
135 if(gameObject->GetName() ==
"Mesh-mesh") {
136 const auto& material = SResource::Create<SMaterial>(
"File:Material/Jack.mat");
137 material->SetOrderLayer(5500);
138 component->SetMaterial(material);
141 const auto& material = SResource::Create<SMaterial>(
"File:Material/Label.mat");
142 component->SetMaterial(material);
147 const auto& ab_children = ab2->GetChildren();
148 for (
const auto& gameObject : ab_children) {
150 if (component ==
nullptr)
continue;
151 if(gameObject->GetName() ==
"Mesh-mesh") {
152 const auto& material = SResource::Create<SMaterial>(
"File:Material/Jack.mat");
153 material->SetOrderLayer(5500);
154 component->SetMaterial(material);
157 const auto& material = SResource::Create<SMaterial>(
"File:Material/Label.mat");
158 component->SetMaterial(material);
164 c2->SetParent(testing);
170 c2->GetTransform()->m_position =
vec3{ -0.2f, -0.3f, -0.2f };
171 c2->GetTransform()->m_scale =
vec3{ 0.5f, 0.5f, 0.5f };
174 const auto& material = SResource::Create<SMaterial>(
"File:Material/SSS_PBR.mat");
175 material->SetOrderLayer(6000);
176 render->SetMaterial(material);
178 const auto& mesh = meshComp->GetMeshID();
185 c3->GetTransform()->m_position.y = -0.7f;
188 c3->GetComponent<
CustomComponent>()->SetClassName(
"testScript2.script");
205 auto c4 = SCloneFactory::Clone(c3, c3);
208 c4->GetTransform()->m_position.y = -0.1f;
209 c4->GetTransform()->m_position.x = -2.f;
210 c4->GetTransform()->m_scale.Set(0.5, 0.5, 0.5);
215 direction->SetParent(root);
216 direction->SetName(
"directional");
217 direction->GetTransform()->m_position =
vec3{ 0.f, 1.f, 0.f };
222 direction->GetComponent<
LightComponent>()->SetLightType(LightComponent::DIRECTIONAL);
227 direction->GetComponent<
CustomComponent>()->SetClassName(
"directionalLight.script");
236 d->GetTransform()->m_position =
vec3{ -2.8f, -1.5f, 0 };
237 light_gm->AddChild(d);
240 d->GetComponent<
LightComponent>()->SetLightType(LightComponent::POINT);
258 a->GetTransform()->m_position =
vec3{ 0, 0.2f, 0.8f };
263 a_cam->SetTarget(c2);
264 a_cam->SetBackgroundSkybox();
265 a_cam->SetBackgroundType(CameraBase::SKYBOX);
272 c4->GetComponent<
CameraComponent>()->SetBackgroundType(CameraBase::SKYBOX);
274 SResource::Create<SFrameBuffer>(
"File:Texture/TestFrameBuffer.framebuffer"));
277 SSceneLoader::SavePrefab(root, CSE::NativeAssetsPath() +
"Scene/test_scene.scene");
278 SAFE_DELETE(generator);
282void FirstDemoScene::Tick(
float elapsedTime) {
284 if (startTIme == 0) {
285 startTIme = elapsedTime;
288 c2->GetTransform()->m_position.x = sinf(elapsedTime*0.001) * 1.0f;;
289 c2->GetTransform()->m_position.y = cosf(elapsedTime*0.001) * 0.5f;;
290 c2->GetTransform()->m_position.z = cosf(elapsedTime*0.001) * 0.5f;;
300 if (elapsedTime - startTIme > 3000) {
301 startTIme = elapsedTime;
302 isInvisible = !isInvisible;
308void FirstDemoScene::Destroy() {
312void FirstDemoScene::switchingObject() {
314 c3->SetIsEnable(!isInvisible);
327 c2->GetTransform()->m_position.y = 0.5f;
STexture * GenerateTexturebuffer(BufferType type, int channel, int level=0)
void RasterizeFramebuffer()
void GenerateFramebuffer(BufferDimension dimension, int width, int height)
void Destroy() override
자동 삭제가 아닌 특정한 상황에서 삭제될 때 호출되는 함수