Sharpdx D3D9没有画

问题描述

我尝试在github上遵循他们的示例,我只想画一条线。但是,当窗口打开时,只有一个黑屏。我不知道我做错了什么。

这是我的源代码。 谢谢您的帮助!

static void Main()
        {
            var form = new RenderForm("Test");
            int width = form.ClientSize.Width;
            int height = form.ClientSize.Height;
            var device = new Device(new Direct3D(),DeviceType.Hardware,form.Handle,CreateFlags.HardwareVertexProcessing,new PresentParameters(width,height) { PresentationInterval = PresentInterval.One });

            Line line = new Line(device);
            
            RawVector2[] vertices =
            {
                new RawVector2(10,10),new RawVector2(10,10)
            };
            

            RenderLoop.Run(form,() =>
            {
                
                device.Clear(ClearFlags.Target,new RawColorBGRA(0,1),1.0f,0);
                device.BeginScene();

                line.Width = 10;
                line.GLLines = true;
                line.Antialias = false;
                line.Draw(vertices,new RawColorBGRA(254,254,1));

                device.EndScene();
                device.Present();
            });
        }

解决方法

这可能不是您的错误,但对您没有帮助,因为即使没有错误,您也几乎看不到。我曾经使用过它,但仅在窗口上下文中使用过,所以我遵循https://github.com/Dan6040/SharpDX-Rastertek-Tutorials,因为我来自C ++和XNA框架。

您的顶点正在绘制一个1像素的点,因为您需要在不同位置绘制2个矢量来绘制一条线

[
new RawVector2(10,10),new RawVector2(10,10)
]

也就是说从x:10 y:10抽奖到x:10 y:10

尝试:

[
new RawVector2(10,new RawVector2(30,30)
]

因此,为了更好地说明绘制三角形,您需要3点和3条线,但是要绘制每条线,则需要在订购中加点

[
new RawVector2(10,30),10)
]

所以说从10,10到10,30,然后到30,30,最后回到10,10,就可以了

仅需注意,这就是游戏引擎无法通过点数组进行工作的原因,它们是指向点的指针的数组,因此您在内存中仅拥有一次点对象,而只使用了指向它们的指针E.G

static void Main()
        {
            var form = new RenderForm("Test");
            int width = form.ClientSize.Width;
            int height = form.ClientSize.Height;
            var device = new Device(new Direct3D(),DeviceType.Hardware,form.Handle,CreateFlags.HardwareVertexProcessing,new PresentParameters(width,height) { PresentationInterval = PresentInterval.One });

            Line line = new Line(device);
            
            RawVector2[] TrianglePoints=
            {
                new RawVector2(10,30)
            };
            
            RawVector2[] vertices = {
                TrianglePoints[0],TrianglePoints[1],TrianglePoints[2],TrianglePoints[0]
            }

            RenderLoop.Run(form,() =>
            {
                
                device.Clear(ClearFlags.Target,new RawColorBGRA(0,1),1.0f,0);
                device.BeginScene();

                line.Width = 10;
                line.GLLines = true;
                line.Antialias = false;
                line.Draw(vertices,new RawColorBGRA(254,254,1));

                device.EndScene();
                device.Present();
            });
        }