c# / Monogame: рисовать полигон примитив? - PullRequest
0 голосов
/ 29 марта 2020

Я пытаюсь нарисовать многоугольник цвета solid. Мне дан вектор векторов 2D, упорядоченный так, что будет ребро от v0 до v1 до v2 до ... до vn до v0.

Существует ли такой примитив?

1 Ответ

0 голосов
/ 16 апреля 2020

Благодарим Стефана Агартсона за сообщение , на котором основан код этого ответа.

Чтобы описать вершины как ребра, а не треугольники, вы можете использовать PrimitiveType.LineStrip вместо * 1006. * вы должны также настроить индекс и счет, поскольку каждая вершина используется только один раз.

BasicEffect basicEffect = new BasicEffect(device);
basicEffect.Texture = myTexture;
basicEffect.TextureEnabled = true;

VertexPositionTexture[] vert = new VertexPositionTexture[4];
vert[0].Position = new Vector3(0, 0, 0); //These connect in order
vert[1].Position = new Vector3(100, 0, 0);
vert[2].Position = new Vector3(100, 100, 0);
vert[3].Position = new Vector3(0, 100, 0);

vert[0].TextureCoordinate = new Vector2(0, 0);
vert[1].TextureCoordinate = new Vector2(1, 0);
vert[2].TextureCoordinate = new Vector2(1, 1);
vert[3].TextureCoordinate = new Vector2(0, 1);

short[] ind = new short[n+1]; // the +1 is to close the shape
for(int i = 0; i < n; i++)
   ind[i] = i;
ind[n] = 0; // return to start to close.

Затем в вашем рендере l oop вы делаете это:

foreach (EffectPass effectPass in basicEffect.CurrentTechnique.Passes) 
{
    effectPass.Apply();
    device.DrawUserIndexedPrimitives<VertexPositionTexture>(
        PrimitiveType.LineStrip, vert, 0, vert.Length, ind, 0, ind.Length);
}
...