Exemple #1
0
        private void FlushFrame()
        {
            InputSnapshot input = Window.PumpEvents();

            VxInput.UpdateFrameInput(input);

            if (!Window.Exists)
            {
                return;
            }
            _cl.Begin();
            _cl.SetFramebuffer(Device.MainSwapchain.Framebuffer);
            _cl.ClearDepthStencil(Device.IsDepthRangeZeroToOne ? 0f : 1f);
            _cl.ClearColorTarget(0, ClearColor);

            Vector3   cameraLookDir = Vector3.Transform(-Vector3.UnitZ, _cameraRotation);
            Matrix4x4 view          = Matrix4x4.CreateLookAt(_cameraPosition, _cameraPosition + cameraLookDir, Vector3.UnitY);
            Matrix4x4 projection    = MathUtil.CreatePerspective(
                Device, Device.IsDepthRangeZeroToOne,
                1f, (float)Window.Width / Window.Height,
                0.5f, 1000f);

            _cl.UpdateBuffer(_viewProjectionBuffer, 0, view * projection);

            SceneInfo sceneInfo = new SceneInfo
            {
                LightDir   = Vector4.Normalize(new Vector4(0.2f, -0.6f, -1f, 0)),
                LightColor = new Vector4(1, 1, 1, 1)
            };

            _cl.UpdateBuffer(_sceneInfoBuffer, 0, sceneInfo);

            _cl.SetPipeline(_modelPipeline);
            _cl.SetGraphicsResourceSet(0, _viewProjectionSet);
            _cl.SetGraphicsResourceSet(1, _worldSet);
            _cl.SetGraphicsResourceSet(2, _modelParamsSet);

            foreach (DrawSubmission submission in _drawSubmissions)
            {
                SubmitDraw(submission);
            }
            _drawSubmissions.Clear();
            _imguiRenderer.Render(Device, _cl);
            _imguiRenderer.Update(Vx.FrameTime, input);

            _cl.End();
            Device.SubmitCommands(_cl);
            Device.SwapBuffers(Device.MainSwapchain);
            Device.WaitForIdle();
        }
Exemple #2
0
        public void Update()
        {
            Vector2 newMousePos = VxInput.MousePosition;
            Vector2 mouseDelta  = newMousePos - _lastMousePos;

            _lastMousePos = newMousePos;
            _yaw          = _yaw + -mouseDelta.X * _mouseSensitivity;
            _pitch        = MathUtil.Clamp(_pitch - mouseDelta.Y * _mouseSensitivity, -1.5f, 1.5f);

            Quaternion camRot     = Quaternion.CreateFromYawPitchRoll(_yaw, _pitch, 0f);
            Vector3    camForward = Vector3.Transform(-Vector3.UnitZ, camRot);
            Vector3    camRight   = Vector3.Cross(camForward, Vector3.UnitY);
            Vector3    camUp      = Vector3.Cross(camRight, camForward);

            Vector3 moveDir = Vector3.Zero;

            if (VxInput.GetKey(Key.W))
            {
                moveDir += camForward;
            }
            if (VxInput.GetKey(Key.S))
            {
                moveDir += -camForward;
            }
            if (VxInput.GetKey(Key.A))
            {
                moveDir += -camRight;
            }
            if (VxInput.GetKey(Key.D))
            {
                moveDir += camRight;
            }
            if (VxInput.GetKey(Key.Q))
            {
                moveDir += -camUp;
            }
            if (VxInput.GetKey(Key.E))
            {
                moveDir += camUp;
            }
            if (moveDir != Vector3.Zero)
            {
                float turboFactor = VxInput.GetKey(Key.ControlLeft) ? 0.125f : VxInput.GetKey(Key.ShiftLeft) ? 2f : 1f;
                Position += Vector3.Normalize(moveDir) * _moveSpeed * Vx.FrameTime * turboFactor;
            }

            Vx.Camera();
            Vx.Position(Position);
            Vx.Rotation(camRot);
        }