[英]How correctly draw a polygon with OpenTK
我是OpenTK 的新手,我正在使用以下代码使用OpenTK绘制大量多边形
public static void DrawPolygon(Point[] points)
{
GL.Begin(BeginMode.Polygon); //IF I Change this to LineStrip every things will be OK
int numberOfPoints = points.Length;
for (int i = 0; i < numberOfPoints; i++)
{
GL.Vertex2(points[i].X, points[i].Y);
}
GL.End();
}
这是在调用DrawPolygon
之前执行的配置代码
GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
GL.MatrixMode(MatrixMode.Projection);
GL.LoadIdentity();
GL.Ortho(0, width, 0, height, -1, 1); // Bottom-left corner pixel has coordinate (0, 0)
GL.Viewport(0, 0, (int)width, (int)height);
GL.ClearColor(drawing.Color.Transparent);
GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
GL.MatrixMode(MatrixMode.Modelview);
GL.LoadIdentity();
GL.Color3(pen.Color);
GL.PolygonMode(MaterialFace.FrontAndBack, PolygonMode.Line);
GL.PointSize(5f);
GL.LineWidth(2f);
当我将渲染图像以 png 格式保存到磁盘时使用此代码,结果将是这样的
结果为: GL.Begin(BeginMode.Polygon);
但是,如果我将DrawPolygon
的第一行更改为GL.Begin(BeginMode.LineStrip);
多边形将按预期呈现,如下所示:
结果为: GL.Begin(BeginMode.LineStrip);
任何人都知道为什么在使用BeginMode.Polygon
时会出现那两条额外的行?
我相信这是因为GL_POLYGON
/ BeginMode.Polygon
只呈现凸多边形。 我认为,如果您尝试渲染凹多边形,正如您所做的那样,驱动程序将尝试拆分您提供的几何图形以将其渲染为凸多边形,因此在您的示例中出现了意外的线条。
在OpenGL中使用多边形渲染模式是不可取的。 线条和三角形的渲染得到了更高程度的优化,因此速度要快得多。 我建议留在线带。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.