Deferred rendering mode + Skybox

- Added deferred rendering mode to the renderer
- Added a skybox to the forward rendering mode
- moved default imported assets directory (temporary fix)
This commit is contained in:
2022-12-28 22:35:23 +01:00
parent 2a5c7811e7
commit 2dcc3f1803
24 changed files with 512 additions and 70 deletions

View File

@ -66,13 +66,9 @@ YAML::Emitter& operator<< (YAML::Emitter& emitter, glm::vec3& vector) {
emitter << YAML::Key << "Light";
emitter << YAML::Value;
emitter << YAML::BeginMap;
emitter << YAML::Key << "strength";
emitter << YAML::Value << entity.GetComponent<LightComponent>().Strength;
emitter << YAML::Key << "Color";
emitter << YAML::Value << entity.GetComponent<LightComponent>().Color;
emitter << YAML::EndMap;
emitter << YAML::EndMap;
}
@ -129,7 +125,6 @@ YAML::Emitter& operator<< (YAML::Emitter& emitter, glm::vec3& vector) {
}
if (entity["Light"]) {
LightComponent lc = SE.AddComponent<LightComponent>();
lc.Strength = entity["Light"]["strength"].as<float>();
lc.Color = glm::vec3(entity["Light"]["Color"][0].as<float>(), entity["Light"]["Color"][1].as<float>(), entity["Light"]["Color"][2].as<float>());
}

View File

@ -106,9 +106,10 @@ public:
switch (result) {
case(NFD_OKAY):
// Import Model
AssetManager::LoadFromSource(
path,
project.get()->GetProjectDirectory() / "Assets"
"build/Debug/Assets"//project.get()->GetProjectDirectory() / "Assets"
);
break;
case(NFD_CANCEL):

View File

@ -19,8 +19,7 @@ using namespace YoggieEngine;
auto matrix = glm::mat4(1.0f);
auto worldOrigin = glm::mat4(1.0f);
auto projection = glm::perspective(45.0f, 0.89f, 0.001f, 1.0f);
auto view = glm::mat4(1.0f);
inline void ComponentView(const std::string& componentName, voidFunction func)
{
@ -40,7 +39,7 @@ public:
void AddComponentDropDown(Entity& selected )
{
static char* names[] = { "Script Component", "Camera Component" };
static char* names[] = { "Script Component", "Camera Component", "Light Component"};
if (ImGui::Button("Add Component"))
ImGui::OpenPopup("Component picker");
@ -82,25 +81,23 @@ public:
ImGui::ColorEdit3("Colour", glm::value_ptr(render3d.color));
}
}
static bool deferred = true;
if (selected.HasComponent<LightComponent>()) {
auto& light = selected.GetComponent<LightComponent>();
if (ImGui::CollapsingHeader("Light", ImGuiTreeNodeFlags_DefaultOpen)) {
ImGui::DragFloat("Strength", &light.Strength, 0.001f);
ImGui::ColorEdit3("Colour", glm::value_ptr(light.Color));
ImGui::Checkbox("Deferred", &deferred);
}
}
if (selected.HasComponent <CameraComponent>()) {
auto& camera = selected.GetComponent<CameraComponent>();
static float Zoom = 90;
static glm::vec3 Position, Rotation = glm::vec3(0.0f);
ComponentView("Camera", [] {
ImGui::SliderFloat("Zoom", &Zoom, 10, 190);
ImGui::InputFloat3("Position:", &Position[0]);
ImGui::InputFloat3("Rotation:", &Rotation[0]);
});
if (ImGui::CollapsingHeader("Camera")) {
ImGui::DragFloat3("Position:",glm::value_ptr(camera.Position), 0.01f);
ImGui::DragFloat3("Rotation:", glm::value_ptr(camera.Rotation), 0.01f);
}
}
if (selected.HasComponent<ScriptComponent>()) {
@ -131,7 +128,7 @@ public:
class Viewport : EditorWindow {
public:
Viewport (Framebuffer& fb, Camera cam ) : EditorWindow("SceneView")
Viewport (Framebuffer& fb, Camera cam) : EditorWindow("SceneView")
{
ImVec2 WinPos = ImGui::GetWindowPos();
ImVec2 ContentRegionMin = ImGui::GetWindowContentRegionMin();
@ -149,11 +146,13 @@ public:
ImGuizmo::Enable(true);
ImGuizmo::SetRect(ScreenSpaceMin.x, ScreenSpaceMin.y,ContentRegionMax.x, ContentRegionMax.y);
ImGuizmo::ViewManipulate(glm::value_ptr(cam.ViewMatrix), 1, { ScreenSpaceMin.x,ScreenSpaceMin.y }, { 90,90 }, 0x22CCCCCC);
glm::mat4 transposed_view = glm::transpose(cam.ViewMatrix);
ImGuizmo::ViewManipulate(glm::value_ptr(transposed_view), 1, { ScreenSpaceMin.x,ScreenSpaceMin.y }, { 90,90 }, 0x22CCCCCC);
ImGuizmo::DrawGrid(glm::value_ptr(cam.ViewMatrix), glm::value_ptr(cam.ProjectionMatrix), glm::value_ptr(worldOrigin), 100.0f);
// Matrix is the model matrix we would want to manipulate
ImGuizmo::Manipulate(glm::value_ptr(cam.ViewMatrix), glm::value_ptr(cam.ProjectionMatrix), ImGuizmo::TRANSLATE, ImGuizmo::WORLD, glm::value_ptr(matrix));
//ImGuizmo::Manipulate(glm::value_ptr(cam.ViewMatrix), glm::value_ptr(cam.ProjectionMatrix), ImGuizmo::TRANSLATE, ImGuizmo::WORLD, glm::value_ptr(cam.ViewMatrix));
}

View File

@ -14,8 +14,6 @@
#include "SceneSerializer.h"
#include "AssetManagement/AssetManager.h"
#include "UI/MainMenuBar.h"
const unsigned int MS_PER_UPDATE = 2;
void CreateTestProject(std::unique_ptr<Project>& project, Scene& scene);
@ -26,6 +24,8 @@ RendererConfig EditorSceneRendererConfig{
true // Depth testing
};
glm::vec3 temp = glm::vec3(0);
Camera cam = Camera(glm::vec3(12.0f, 1.0f, 0.0f), glm::vec3(45.0f, 0.0f, 0.0f), 90);
class Editor : public Application {
public:
Editor()
@ -46,7 +46,9 @@ public:
viewportRenderer.Submit(renderComponent, t);
});
viewportRenderer.Render();
// Render scene
viewportRenderer.Render(ActiveScene);
}
void RenderEditorGUI() {
@ -120,7 +122,6 @@ public:
Physics Physics;
//Physics.Demo();
double previous = glfwGetTime();
double lag = 0.0;
while (!AppWindow.WindowShouldClose())
@ -145,6 +146,8 @@ public:
lag -= MS_PER_UPDATE;
}
RenderScene();
RenderEditorGUI();
@ -176,7 +179,6 @@ private:
std::unique_ptr<Project> CurrentProject;
Scene ActiveScene;
};
YoggieEngine::Application* CreateApplication() {
@ -211,8 +213,10 @@ void CreateTestProject(std::unique_ptr<Project>& project, Scene& scene ) {
rendercube2.mesh = *(model->renderable->mesh);
// create an ambient light source
auto AmbientLight = scene.AddEntity("AmbientLight");
auto light = AmbientLight.AddComponent<LightComponent>();
light.Color = glm::vec3(1.0f);
light.Strength = 1.0f;
auto light = scene.AddEntity("Light");
auto lightComponent = light.AddComponent<LightComponent>();
lightComponent.Color = glm::vec3(1.0f);
}