Ejemplo n.º 1
0
        public void OnFrameRender(Microsoft.DirectX.Direct3D.Device device, double totalTime, float elapsedTime)
        {
            currentTime = totalTime;

            if ((modelControl != null) && (modelControl.Reflection != null))
            {
                //if (screen == null)
                //    screen = device.GetRenderTarget(0);
                modelControl.Reflection.UpdateCubeMap(device, totalTime, elapsedTime, modelControl.AirplaneModel.Position);
                //device.SetRenderTarget(0, screen);
            }


            bool beginSceneCalled = false;

            // Clear the render target and the zbuffer
            device.Clear(ClearFlags.ZBuffer | ClearFlags.Target, 0x00424B79, 1.0f, 0);
            try
            {
                device.BeginScene();
                Framework.Instance.Device.RenderState.Ambient = Color.FromArgb(148, 148, 148);
                beginSceneCalled = true;
                Framework.Instance.CurrentCamera.OnFrameRender(device, totalTime, elapsedTime);
                sky.OnFrameRender(device, totalTime, elapsedTime);
                scenery.OnFrameRender(device, totalTime, elapsedTime);
                modelControl.OnFrameRender(device, totalTime, elapsedTime);
                if (CollisionPointsVisible && (!modelControl.Flying))
                {
                    collisionPoints.OnFrameRender(device, totalTime, elapsedTime);
                }
                transparentObjectManager.OnFrameRender(device, totalTime, elapsedTime);
                if ((toolbox != null) && (toolbox.CurrentObject != null) && (!modelControl.Flying))
                {
                    // Render the wireframe
                    device.RenderState.FillMode = FillMode.WireFrame;
                    toolbox.CurrentObject.OnFrameRender(device, totalTime, elapsedTime);
                    // Render the rotationaxis
                    ControlSurface surface = toolbox.CurrentObject as ControlSurface;
                    if (surface != null)
                    {
                        rotationAxisMesh.Vertex1 = surface.WorldPosition * modelControl.AirplaneModel.AirplaneControl.AircraftParameters.Scale;
                        rotationAxisMesh.Vertex2 = (surface.WorldPosition + 2 * surface.RotationAxis) * modelControl.AirplaneModel.AirplaneControl.AircraftParameters.Scale;
                        rotationAxisMesh.OnFrameRender(device, totalTime, elapsedTime);
                    }
                    device.RenderState.FillMode = FillMode.Solid;
                }

                if (CursorVisible)
                {
                    cursor3d.OnFrameRender(device, totalTime, elapsedTime);
                }

                if (Cursor2Visible)
                {
                    cursor3d2.OnFrameRender(device, totalTime, elapsedTime);
                }

                // Get the world matrix
                //Matrix worldMatrix = worldCenter * camera.WorldMatrix;

                // Show UI
                //hud.OnRender(elapsedTime);
            }
            finally
            {
                if (beginSceneCalled)
                {
                    device.EndScene();
                }
            }
        }