示例#1
0
        /// <summary>
        /// The render.
        /// </summary>
        /// <remarks></remarks>
        private void Render()
        {
            if (pause)
            {
                return;
            }

            device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0);
            device.BeginScene();
            cam.move();

            SetupMatrices();
            MoveSpawnsWithKeyboard();

            device.RenderState.FillMode = FillMode.WireFrame;
            device.Material             = DefaultMaterial;
            device.RenderState.Lighting = true;
            device.RenderState.CullMode = Cull.None;

            render.device.SetTexture(0, null);
            render.device.RenderState.AlphaBlendEnable = true;
            render.device.RenderState.AlphaTestEnable  = true;
            render.device.RenderState.DestinationBlend = Blend.DestinationAlpha;
            render.device.RenderState.SourceBlend      = Blend.SourceAlpha;
            device.Transform.World = Matrix.Identity;
            //Raw.ParsedModel.DisplayedInfo.Draw(ref device, ref bsp.SkyBox);
            dxcoll.Draw(ref device);

            if (currentMode == editingModes.Point)
            {
                device.RenderState.FillMode  = FillMode.Point;
                device.Material              = BlueMaterial;
                device.RenderState.PointSize = 4;
                dxcoll.Draw(ref device);

                #region Render Spheres over selected points
                device.Material                     = GreenMaterial;
                device.RenderState.FillMode         = FillMode.WireFrame;
                device.VertexFormat                 = CustomVertex.PositionColored.Format;
                device.RenderState.AlphaBlendEnable = false;
                device.RenderState.AlphaTestEnable  = false;
                device.SetTexture(0, null);


                for (int i = 0; i < SelectedPoints.Count; i++)
                {
                    device.Transform.World = Matrix.Translation(coll.Vertices[SelectedPoints[i]].X, coll.Vertices[SelectedPoints[i]].Y, coll.Vertices[SelectedPoints[i]].Z);
                    sphere.DrawSubset(0);
                }
                #endregion
            }
            else if (currentMode == editingModes.Surface)
            {
                if (currentSurface != -1)
                {
                    device.RenderState.Lighting           = false;
                    device.RenderState.ZBufferEnable      = false;
                    device.RenderState.CullMode           = Cull.None;
                    device.RenderState.AlphaBlendEnable   = true;
                    device.TextureState[0].ColorOperation = TextureOperation.SelectArg1;
                    device.TextureState[0].AlphaOperation = TextureOperation.SelectArg1;
                    device.TextureState[0].ColorArgument1 = TextureArgument.TextureColor;
                    device.TextureState[0].AlphaArgument1 = TextureArgument.TextureColor;

                    //device.Material = GreenMaterial;
                    device.RenderState.FillMode = FillMode.Solid;
                    device.Transform.World      = Matrix.Identity;
                    device.DrawIndexedUserPrimitives(PrimitiveType.TriangleFan,
                                                     0,
                                                     coll.Vertices.Length,
                                                     polygons[currentSurface].indices.Length - 2,
                                                     polygons[currentSurface].indices,
                                                     true,
                                                     coll.Vertices);
                }
            }

            device.EndScene();

            // Update the screen
            device.Present();
        }