Exemplo n.º 1
0
        private bool IsInScreenBounds(Vector2 position)
        {
            CWindowRenderer sceneRenderer = m_renderScene.SceneRenderer;
            int             top           = sceneRenderer.Top;
            int             left          = sceneRenderer.Left;
            int             bottom        = sceneRenderer.Top + sceneRenderer.Height;
            int             right         = sceneRenderer.Left + sceneRenderer.Width;

            return(position.X >= left && position.X <= right && position.Y >= top && position.Y <= bottom);
        }
Exemplo n.º 2
0
        public void SetActiveWindow(CWindowRenderer window)
        {
            ActiveWindow = window;

            m_uiRenderer.SetContext(window.UIContext);
            m_uiRenderer.Resize(ActiveWindow.Width, ActiveWindow.Height, ActiveWindow.Left, ActiveWindow.Top);
            m_uiRenderer.BeginRender(m_currentFrameTime);

            m_d3dDeviceContext.OutputMerger.SetDepthStencilState(ActiveWindow.DepthStencilState);
            m_d3dDeviceContext.OutputMerger.SetRenderTargets(ActiveWindow.DepthStencilView, ActiveWindow.RenderTargetView);
            m_d3dDeviceContext.Rasterizer.State = ActiveWindow.RasterizerState;
            m_d3dDeviceContext.Rasterizer.SetViewport(ActiveWindow.Viewport);
            m_d3dDeviceContext.ClearRenderTargetView(ActiveWindow.RenderTargetView, ClearColor);
            m_d3dDeviceContext.ClearDepthStencilView(ActiveWindow.DepthStencilView, DepthStencilClearFlags.Depth, 1.0f, 0xFF);
        }
Exemplo n.º 3
0
        private void EngineThread_Update(float deltaTime)
        {
            m_renderScene.DebugRenderer.DrawArrow(Vector3.Zero, Axis.Forward, 1.0f, Color.Blue.ToColor4(), 0.0f);
            m_renderScene.DebugRenderer.DrawArrow(Vector3.Zero, Axis.Up, 1.0f, Color.Green.ToColor4(), 0.0f);
            m_renderScene.DebugRenderer.DrawArrow(Vector3.Zero, Axis.Right, 1.0f, Color.Red.ToColor4(), 0.0f);
            bool bUpdateViewInfo = false;

            if (m_bIsRightMouseDown)
            {
                float   forwardDelta  = Input.GetNativeAxisValue(EInputAxis.MouseX);
                Vector3 positionDelta = Axis.Forward * forwardDelta * ZoomSpeed;
                m_cameraTransform.Position += positionDelta;
                bUpdateViewInfo             = true;
            }

            if (m_bIsLeftMouseDown)
            {
                float upAxisRotationAngle    = Input.GetNativeAxisValue(EInputAxis.MouseX) * OrbitSpeed;
                float rightAxisRotationAngle = Input.GetNativeAxisValue(EInputAxis.MouseY) * OrbitSpeed;

                Quaternion xRotation = Quaternion.RotationAxis(KlaxMath.Axis.Up, upAxisRotationAngle);
                m_orbitTransform.RotateLocal(xRotation);
                Quaternion yRotation = Quaternion.RotationAxis(m_orbitTransform.Right, rightAxisRotationAngle);
                m_orbitTransform.RotateLocal(yRotation);
                bUpdateViewInfo = true;
            }

            if (bUpdateViewInfo)
            {
                SSceneViewInfo viewInfo = new SSceneViewInfo();
                viewInfo.Fov                  = FieldOfView;
                viewInfo.ScreenFar            = ScreenFar;
                viewInfo.ScreenNear           = ScreenNear;
                viewInfo.FitProjectionToScene = true;
                viewInfo.ViewMatrix           = Matrix.Invert(m_cameraTransform.WorldMatrix);
                viewInfo.ViewLocation         = m_cameraTransform.WorldPosition;
                viewInfo.CreateBoundingFrustum();
                m_renderScene.UpdateViewInfo(in viewInfo);
            }

            if (ShowMeshSelection)
            {
                CWindowRenderer window = m_renderScene.SceneRenderer;
                ImGui.SetNextWindowPos(new System.Numerics.Vector2(0, window.Height - 40));
                ImGui.SetNextWindowSize(new System.Numerics.Vector2(window.Width, 40));
                ImGui.SetNextWindowBgAlpha(0);
                ImGui.Begin("MeshSelection", ImGuiWindowFlags.NoMove | ImGuiWindowFlags.NoTitleBar | ImGuiWindowFlags.NoResize | ImGuiWindowFlags.NoScrollbar);
                if (ImGui.Button("Cu"))
                {
                    EngineThread_SetPreviewMesh(EngineBaseContentLoader.DefaultCube, true, false);
                    m_lastSelectedDefaultMesh = EngineBaseContentLoader.DefaultCube;
                }
                ImGui.SameLine();
                if (ImGui.Button("Sp"))
                {
                    EngineThread_SetPreviewMesh(EngineBaseContentLoader.DefaultSphere, true, false);
                    m_lastSelectedDefaultMesh = EngineBaseContentLoader.DefaultSphere;
                }
                ImGui.SameLine();
                if (ImGui.Button("Cy"))
                {
                    EngineThread_SetPreviewMesh(EngineBaseContentLoader.DefaultCylinder, true, false);
                    m_lastSelectedDefaultMesh = EngineBaseContentLoader.DefaultCylinder;
                }
                ImGui.End();
            }
        }