问题描述
我尝试在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();
});
}