Пример #1
0
        private static void InitialDirectX()
        {
            rand   = new Random();
            player = new Player(20, 20, 25, 0);
            items  = new List <Item>();
            //     for(int i = 0; i< rand.Next(2,4); i++)
            int k = rand.Next(1, 2);
            int j = rand.Next(0, 1);

            for (int i = 0; i < 5; i++)
            {
                Item item = new Item(RandomGenerate.GetCoord((k * i + j) % 9).X, RandomGenerate.GetCoord((k * i + j) % 9).Y);
                items.Add(item);
            }
            exit                 = new Exit(RandomGenerate.GetCoord(rand.Next(9, 12)).X, RandomGenerate.GetCoord(rand.Next(9, 12)).Y);
            polygons             = new List <Polygon>();
            uniqueAngles         = new List <float>();
            uniqueAnglesNotOnFOV = new List <float>();
            intersects           = new List <ParamPoint>();
            backViewSide         = new List <PointF>();
            mouseRay             = new Ray
            {
                Begin = new PointF(player.X, player.Y),
                Mouse = new PointF(Cursor.Position.X, Cursor.Position.Y)
            };
            raysFOG  = new List <Ray>();
            raysBACK = new List <Ray>();



            // creat form;
            renderForm = new RenderForm(title);
            // set windows size
            renderForm.Size          = new System.Drawing.Size(892, 498);
            renderForm.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
            // creat swapchain
            var swapChainDesc = new SwapChainDescription()
            {
                BufferCount       = 4,
                Flags             = SwapChainFlags.AllowModeSwitch,
                IsWindowed        = true,
                ModeDescription   = new ModeDescription(0, 0, new Rational(60, 1), Format.R8G8B8A8_UNorm),
                OutputHandle      = renderForm.Handle,
                SampleDescription = new SampleDescription(1, 0),
                SwapEffect        = SwapEffect.Discard,
                Usage             = Usage.RenderTargetOutput
            };

            D3D.FeatureLevel[] featureLevel = { D3D.FeatureLevel.Level_9_3, D3D.FeatureLevel.Level_10_1, D3D.FeatureLevel.Level_11_1 };
            Device.CreateWithSwapChain(D3D.DriverType.Hardware, DeviceCreationFlags.BgraSupport, featureLevel, swapChainDesc, out device, out swapChain);
            Surface backbuffer = Surface.FromSwapChain(swapChain, 0);

            factory2d = new Factory2D(FactoryType.MultiThreaded);

            var dpi = factory2d.DesktopDpi;

            renderTarget = new RenderTarget(factory2d, backbuffer, new RenderTargetProperties()
            {
                DpiX        = dpi.Width,
                DpiY        = dpi.Height,
                MinLevel    = FeatureLevel.Level_9,
                PixelFormat = new PixelFormat(Format.R8G8B8A8_UNorm, SharpDX.Direct2D1.AlphaMode.Ignore),
                Type        = RenderTargetType.Default,
                Usage       = RenderTargetUsage.None
            });


            // auto resize windows system
            renderForm.AutoSizeMode        = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
            renderTarget.AntialiasMode     = AntialiasMode.Aliased;
            renderTarget.TextAntialiasMode = TextAntialiasMode.Aliased;

            using (SharpDX.DirectWrite.Factory textFactory = new SharpDX.DirectWrite.Factory(SharpDX.DirectWrite.FactoryType.Shared))
            {
                textFormat = new Text(
                    textFactory,
                    "MS Sans Serif",
                    SharpDX.DirectWrite.FontWeight.SemiBold,
                    SharpDX.DirectWrite.FontStyle.Normal,
                    SharpDX.DirectWrite.FontStretch.Medium,
                    16.0f);
            }


            renderForm.Click     += RenderForm_Click;
            renderForm.KeyUp     += RenderForm_KeyUp;
            renderForm.KeyDown   += RenderForm_KeyDown;
            renderForm.Load      += RenderForm_Load;
            renderForm.MouseMove += RenderForm_MouseMove;
        }