none
C#使用DirectX编程出现小问题:图形比原来图形长宽比例发生改变 RRS feed

  • 问题

  • 这是我的初始化代码

    try
                {
                    PresentParameters presentParams = new PresentParameters();
                    presentParams.Windowed = true; //指定以Windows窗体形式显示
                    presentParams.SwapEffect = SwapEffect.Discard; 
                     
                    presentParams.EnableAutoDepthStencil = true;
                    presentParams.AutoDepthStencilFormat = DepthFormat.D16;
                    device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams); 
                    device.RenderState.ZBufferEnable = true;
                    device.RenderState.CullMode = Cull.None;
                    device.RenderState.FillMode = Microsoft.DirectX.Direct3D.FillMode.WireFrame;
                    device.DeviceResizing += new CancelEventHandler(this.CancelResize);
                    spr = new Sprite(device);
                    return true;
                }
                catch (DirectXException e)
                {
                    MessageBox.Show(e.ToString(), "Error"); //处理异常
                    return false;
                }

    然后是render()

    if (device == null)   
                {
                    return;
                }
                device.Clear(ClearFlags.Target, Color.Black, 1.0f, 0);
                device.BeginScene();
    
                spr.Begin(SpriteFlags.AlphaBlend);               
                spr.Draw(texture, Vector3.Empty, new Vector3(100, 100,  0), Color.White.ToArgb());//texture是我的一个图片
    
                spr.End();
                device.EndScene();
                device.Present();

    然后开始用Main()调用render(),渲染时texture变窄了,并且有时会闪烁。

    求助解决这些问题,谢谢。

    2019年10月1日 0:33

全部回复

  • Hi,

    或许你可以尝试设置双缓冲。或者重写Form的OnPaintBackground方法。

        protected override void OnPaintBackground(PaintEventArgs e) { }

    Regards,

    Kyle


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2019年10月1日 5:57
    版主
  • 您好:

    在我的代码中我使用了DirectX而不是GDI+,我知道如何设计GDI+的双缓冲代码,但不知道如何做DirectX的,能否给我一段代码示例?谢谢。

    2019年10月1日 7:18