Can move around scene again .. working on Rendering engine still
This commit is contained in:
		@ -18,6 +18,7 @@ void Viewport::Draw() {
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
    cam.Update();
 | 
			
		||||
    renderer.SetMainCamera(cam);
 | 
			
		||||
    renderer.Render(scene);
 | 
			
		||||
 | 
			
		||||
    ImVec2 WinPos = ImGui::GetWindowPos();
 | 
			
		||||
@ -37,6 +38,7 @@ void Viewport::Draw() {
 | 
			
		||||
    ImGuizmo::SetRect(ScreenSpaceMin.x, ScreenSpaceMin.y, ContentRegionMax.x, ContentRegionMax.y);
 | 
			
		||||
 | 
			
		||||
    glm::mat4 transposed_view = glm::transpose(cam.ViewMatrix);
 | 
			
		||||
    isFocused = ImGui::IsWindowFocused();
 | 
			
		||||
 | 
			
		||||
    //ImGuizmo::DrawGrid(glm::value_ptr(cam.ViewMatrix), glm::value_ptr(cam.ProjectionMatrix), glm::value_ptr(worldOrigin), 100.0f);
 | 
			
		||||
    //ImGuizmo::ViewManipulate(glm::value_ptr(cam.ViewMatrix), 1, { ScreenSpaceMin.x,ScreenSpaceMin.y }, { 90,90 }, 0x22CCCCCC);
 | 
			
		||||
@ -44,12 +46,4 @@ void Viewport::Draw() {
 | 
			
		||||
    // 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(cam.ViewMatrix));
 | 
			
		||||
 | 
			
		||||
    if (ImGui::IsWindowFocused())
 | 
			
		||||
    {
 | 
			
		||||
        isFocused = true;
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
        isFocused = false;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -55,67 +55,15 @@ public:
 | 
			
		||||
 | 
			
		||||
            scene.Update();
 | 
			
		||||
 | 
			
		||||
            if (sceneview.isFocused)
 | 
			
		||||
            {
 | 
			
		||||
                const float movement_speed = 0.1f;
 | 
			
		||||
                static float lastX = 400, lastY = 300;
 | 
			
		||||
                const float sensitivity = 0.1;
 | 
			
		||||
                static bool firstMouse = true;
 | 
			
		||||
 | 
			
		||||
                if (MouseButtonPressed(YOGGIE_MOUSE_BUTTON_RIGHT)) {
 | 
			
		||||
 | 
			
		||||
                    glfwSetInputMode((GLFWwindow*)appWindow->GetHandle(), GLFW_CURSOR, GLFW_CURSOR_HIDDEN);
 | 
			
		||||
                    auto newX = getCursorPosX(appWindow);
 | 
			
		||||
                    auto newY = getCursorPosY(appWindow);
 | 
			
		||||
 | 
			
		||||
                    if (firstMouse)
 | 
			
		||||
                    {
 | 
			
		||||
                        lastX = newX;
 | 
			
		||||
                        lastY = newY;
 | 
			
		||||
                        firstMouse = false;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                    float xoffset = newX - lastX;
 | 
			
		||||
                    float yoffset = newY - lastY;
 | 
			
		||||
 | 
			
		||||
                    lastX = newX;
 | 
			
		||||
                    lastY = newY;
 | 
			
		||||
 | 
			
		||||
                    xoffset *= sensitivity;
 | 
			
		||||
                    yoffset *= sensitivity;
 | 
			
		||||
 | 
			
		||||
                    sceneview.cam.yaw += xoffset;
 | 
			
		||||
                    sceneview.cam.pitch += yoffset;
 | 
			
		||||
 | 
			
		||||
                    if (sceneview.cam.pitch > 89.0f)
 | 
			
		||||
                        sceneview.cam.pitch = 89.0f;
 | 
			
		||||
                    if (sceneview.cam.pitch < -89.0f)
 | 
			
		||||
                        sceneview.cam.pitch = -89.0f;
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
                else if (firstMouse == false)
 | 
			
		||||
                {
 | 
			
		||||
                    glfwSetInputMode((GLFWwindow*)appWindow->GetHandle(), GLFW_CURSOR, GLFW_CURSOR_NORMAL);
 | 
			
		||||
                    firstMouse = true;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                // Check for Camara movement input here!
 | 
			
		||||
                if (keyIsPressed(YOGGIE_KEY_W))
 | 
			
		||||
                    sceneview.cam.Position += sceneview.cam.Front * movement_speed;
 | 
			
		||||
 | 
			
		||||
                if (keyIsPressed(YOGGIE_KEY_A))
 | 
			
		||||
                    sceneview.cam.Position -= sceneview.cam.Right * movement_speed;
 | 
			
		||||
 | 
			
		||||
                if (keyIsPressed(YOGGIE_KEY_S))
 | 
			
		||||
                    sceneview.cam.Position -= sceneview.cam.Front * movement_speed;
 | 
			
		||||
 | 
			
		||||
                if (keyIsPressed(YOGGIE_KEY_D))
 | 
			
		||||
                    sceneview.cam.Position += sceneview.cam.Right * movement_speed;
 | 
			
		||||
            if (sceneview.isFocused) {
 | 
			
		||||
                UpdateSceneCamera(sceneview);
 | 
			
		||||
 | 
			
		||||
                std::cout << "Scene view in Focus!\r" ;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            GuiBegin();
 | 
			
		||||
            
 | 
			
		||||
            
 | 
			
		||||
            {
 | 
			
		||||
                MainMenuBar menuBar = MainMenuBar();
 | 
			
		||||
 | 
			
		||||
@ -181,10 +129,70 @@ public:
 | 
			
		||||
private:
 | 
			
		||||
    bool SimulatePhysics = true;
 | 
			
		||||
    YoggieEngine::Entity  Selected;
 | 
			
		||||
 | 
			
		||||
    Project project;
 | 
			
		||||
    Scene scene;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    void UpdateSceneCamera(Viewport& sceneview) {
 | 
			
		||||
        const float movement_speed = 0.1f;
 | 
			
		||||
        static float lastX = 400, lastY = 300;
 | 
			
		||||
        const float sensitivity = 0.1;
 | 
			
		||||
        static bool firstMouse = true;
 | 
			
		||||
 | 
			
		||||
        if (MouseButtonPressed(YOGGIE_MOUSE_BUTTON_RIGHT)) {
 | 
			
		||||
 | 
			
		||||
            glfwSetInputMode((GLFWwindow*)appWindow->GetHandle(), GLFW_CURSOR, GLFW_CURSOR_HIDDEN);
 | 
			
		||||
            auto newX = getCursorPosX(appWindow);
 | 
			
		||||
            auto newY = getCursorPosY(appWindow);
 | 
			
		||||
 | 
			
		||||
            if (firstMouse)
 | 
			
		||||
            {
 | 
			
		||||
                lastX = newX;
 | 
			
		||||
                lastY = newY;
 | 
			
		||||
                firstMouse = false;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            float xoffset = newX - lastX;
 | 
			
		||||
            float yoffset = newY - lastY;
 | 
			
		||||
 | 
			
		||||
            lastX = newX;
 | 
			
		||||
            lastY = newY;
 | 
			
		||||
 | 
			
		||||
            xoffset *= sensitivity;
 | 
			
		||||
            yoffset *= sensitivity;
 | 
			
		||||
 | 
			
		||||
            sceneview.cam.yaw += xoffset;
 | 
			
		||||
            sceneview.cam.pitch += yoffset;
 | 
			
		||||
 | 
			
		||||
            if (sceneview.cam.pitch > 89.0f)
 | 
			
		||||
                sceneview.cam.pitch = 89.0f;
 | 
			
		||||
            if (sceneview.cam.pitch < -89.0f)
 | 
			
		||||
                sceneview.cam.pitch = -89.0f;
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
        else if (firstMouse == false)
 | 
			
		||||
        {
 | 
			
		||||
            glfwSetInputMode((GLFWwindow*)appWindow->GetHandle(), GLFW_CURSOR, GLFW_CURSOR_NORMAL);
 | 
			
		||||
            firstMouse = true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Check for Camara movement input here!
 | 
			
		||||
        if (keyIsPressed(YOGGIE_KEY_W)) {
 | 
			
		||||
            sceneview.cam.Position += sceneview.cam.Front * movement_speed;
 | 
			
		||||
            std::cout << "Pressed W !" << std::endl;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (keyIsPressed(YOGGIE_KEY_A))
 | 
			
		||||
            sceneview.cam.Position -= sceneview.cam.Right * movement_speed;
 | 
			
		||||
 | 
			
		||||
        if (keyIsPressed(YOGGIE_KEY_S))
 | 
			
		||||
            sceneview.cam.Position -= sceneview.cam.Front * movement_speed;
 | 
			
		||||
 | 
			
		||||
        if (keyIsPressed(YOGGIE_KEY_D))
 | 
			
		||||
            sceneview.cam.Position += sceneview.cam.Right * movement_speed;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
YoggieEngine::Application* CreateApplication() {
 | 
			
		||||
@ -192,3 +200,5 @@ YoggieEngine::Application* CreateApplication() {
 | 
			
		||||
    return new Editor();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -71,14 +71,14 @@ Renderer::Renderer(RendererConfig& config)
 | 
			
		||||
	lightingPassShader("build/Debug/Shaders/deferred/lightPass.vert", "build/Debug/Shaders/deferred/lightPass.frag"),
 | 
			
		||||
	SkyboxShader("build/Debug/Shaders/Cubemaps/Skybox.vert", "build/Debug/Shaders/Cubemaps/Skybox.frag"),
 | 
			
		||||
	BlendingShader("build/Debug/Shaders/forward/Blending.vert", "build/Debug/Shaders/forward/Blending.frag"),
 | 
			
		||||
	forwardShader("build/Debug/Shaders/forward/geometry.vert", "build/Debug/Shaders/forward/geometry.frag")
 | 
			
		||||
	forwardShader("build/Debug/Shaders/forward/geometry.vert", "build/Debug/Shaders/forward/geometry.frag"),
 | 
			
		||||
	postProcessingShader("build/Debug/Shaders/forward/postprocessing.vert", "build/Debug/Shaders/forward/postprocessing.frag")
 | 
			
		||||
{	
 | 
			
		||||
	width = config.ScreenWidth;
 | 
			
		||||
	height = config.ScreenHeight;
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	glEnable(GL_DEPTH_TEST);
 | 
			
		||||
 | 
			
		||||
	// Deferred Rendering 
 | 
			
		||||
	glGenFramebuffers(1, &gBuffer);
 | 
			
		||||
	glBindFramebuffer(GL_FRAMEBUFFER, gBuffer);
 | 
			
		||||
@ -151,9 +151,6 @@ Renderer::Renderer(RendererConfig& config)
 | 
			
		||||
	grassTexture = Texture("build/Debug/Texture/grass.png", true);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Renderer::~Renderer(){}
 | 
			
		||||
@ -257,6 +254,32 @@ void Renderer::GeometryPass() {
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Renderer::ForwardGeometryPass() 
 | 
			
		||||
{
 | 
			
		||||
	for (const DrawCommand& command : commands)
 | 
			
		||||
	{
 | 
			
		||||
		if (command.isDynamic == false)
 | 
			
		||||
			continue;
 | 
			
		||||
 | 
			
		||||
		glBindVertexArray(command.VAO_identifier);
 | 
			
		||||
		glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, command.IBO_identifier);
 | 
			
		||||
 | 
			
		||||
		forwardShader.Use();
 | 
			
		||||
 | 
			
		||||
		forwardShader.setUniformVec3("Color", command.color);
 | 
			
		||||
		forwardShader.setUniformMat4("M", command.transform.LocalTransform);
 | 
			
		||||
		forwardShader.setUniformMat4("V", MainCamera.ViewMatrix);
 | 
			
		||||
		forwardShader.setUniformMat4("P", MainCamera.ProjectionMatrix);
 | 
			
		||||
 | 
			
		||||
		glDrawElements(GL_TRIANGLES, static_cast<unsigned int>(command.num_elements),
 | 
			
		||||
			GL_UNSIGNED_INT, NULL);
 | 
			
		||||
 | 
			
		||||
		glBindVertexArray(0);
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Renderer::SkyboxPass() {
 | 
			
		||||
	// Render skybox 
 | 
			
		||||
	glDepthMask(GL_FALSE);
 | 
			
		||||
@ -267,7 +290,6 @@ void Renderer::SkyboxPass() {
 | 
			
		||||
	glBindTexture(GL_TEXTURE_CUBE_MAP, sky.getID());
 | 
			
		||||
	glDrawArrays(GL_TRIANGLES, 0, 36);
 | 
			
		||||
	glBindVertexArray(0);
 | 
			
		||||
	
 | 
			
		||||
	glDepthMask(GL_TRUE);
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
@ -361,12 +383,38 @@ void Renderer::BlendingPass() {
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	glBindVertexArray(0);
 | 
			
		||||
 | 
			
		||||
	glDisable(GL_BLEND);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Renderer::PostProcessing() 
 | 
			
		||||
{
 | 
			
		||||
	postProcessingShader.Use();
 | 
			
		||||
	postProcessingShader.setUniformInt("screen", 0);
 | 
			
		||||
 | 
			
		||||
	glActiveTexture(GL_TEXTURE0);
 | 
			
		||||
	glBindTexture(GL_TEXTURE_2D, m_framebuffer.GetColourAttachment());
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	glBindVertexArray(quadVAO);
 | 
			
		||||
	glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
 | 
			
		||||
	glBindVertexArray(0);
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Renderer::CopyGBuffer() {
 | 
			
		||||
	glBindFramebuffer(GL_READ_FRAMEBUFFER, gBuffer);
 | 
			
		||||
	glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_framebuffer.GetId());
 | 
			
		||||
	glBlitFramebuffer(0, 0, width, height, 0, 0, width, height, GL_DEPTH_BUFFER_BIT, GL_NEAREST);
 | 
			
		||||
 | 
			
		||||
	glBindFramebuffer(GL_FRAMEBUFFER, m_framebuffer.GetId());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Renderer::Render(Scene& scene) 
 | 
			
		||||
{	
 | 
			
		||||
	SubmitVegetationDemo();
 | 
			
		||||
@ -380,37 +428,13 @@ void Renderer::Render(Scene& scene)
 | 
			
		||||
 | 
			
		||||
	lightingPass(scene);
 | 
			
		||||
	
 | 
			
		||||
	CopyGBuffer();
 | 
			
		||||
 | 
			
		||||
	glBindFramebuffer(GL_READ_FRAMEBUFFER, gBuffer);
 | 
			
		||||
	glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_framebuffer.GetId());
 | 
			
		||||
	glBlitFramebuffer(0, 0, width, height, 0, 0, width, height, GL_DEPTH_BUFFER_BIT, GL_NEAREST);
 | 
			
		||||
	ForwardGeometryPass();
 | 
			
		||||
 | 
			
		||||
	// Forward rendering approach
 | 
			
		||||
 	glBindFramebuffer(GL_FRAMEBUFFER, m_framebuffer.GetId());
 | 
			
		||||
 | 
			
		||||
	for (const DrawCommand& command : commands)
 | 
			
		||||
	{
 | 
			
		||||
		if (command.isDynamic == false)
 | 
			
		||||
			continue;
 | 
			
		||||
 | 
			
		||||
		glBindVertexArray(command.VAO_identifier);
 | 
			
		||||
		glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, command.IBO_identifier);
 | 
			
		||||
 | 
			
		||||
		forwardShader.Use();
 | 
			
		||||
 | 
			
		||||
		forwardShader.setUniformVec3("Color", command.color);
 | 
			
		||||
		forwardShader.setUniformMat4("M", command.transform.LocalTransform);
 | 
			
		||||
		forwardShader.setUniformMat4("V", MainCamera.ViewMatrix);
 | 
			
		||||
		forwardShader.setUniformMat4("P", MainCamera.ProjectionMatrix);
 | 
			
		||||
 | 
			
		||||
		glDrawElements(GL_TRIANGLES, static_cast<unsigned int>(command.num_elements),
 | 
			
		||||
			GL_UNSIGNED_INT, NULL);
 | 
			
		||||
 | 
			
		||||
		glBindVertexArray(0);
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
	BlendingPass();
 | 
			
		||||
 | 
			
		||||
	//PostProcessing();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	//  Lighting pass 
 | 
			
		||||
 | 
			
		||||
@ -35,10 +35,12 @@ namespace YoggieEngine {
 | 
			
		||||
		Framebuffer& getCurrentFrameBuffer() { return m_framebuffer; }
 | 
			
		||||
	private:
 | 
			
		||||
		void GeometryPass();
 | 
			
		||||
		void ForwardGeometryPass();
 | 
			
		||||
		void SkyboxPass();
 | 
			
		||||
		void lightingPass(Scene& scene);
 | 
			
		||||
		void BlendingPass();
 | 
			
		||||
 | 
			
		||||
		void PostProcessing();
 | 
			
		||||
		void CopyGBuffer();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	private:
 | 
			
		||||
@ -59,6 +61,8 @@ namespace YoggieEngine {
 | 
			
		||||
		Shader lightingPassShader;
 | 
			
		||||
		Shader gBufferShader;
 | 
			
		||||
		Shader SkyboxShader;
 | 
			
		||||
		Shader postProcessingShader;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		// blending
 | 
			
		||||
		Shader BlendingShader;
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user