Я новичок в 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
?
Можно ли нарисовать многоугольник с режимом «Треугольник»? Что делать, если я хочу нарисовать заполненные полигоны? В этом случае я не могу использовать режим LineStrip. –
Чтобы нарисовать фигуру треугольниками, вам понадобится использовать метод [polygon triangulation] (https://en.wikipedia.org/wiki/Polygon_triangulation), чтобы разложить ваш многоугольник на список треугольников. –
Если триангуляция выполняется быстрее, можете ли вы предоставить образец кода? –