Code: Select all
public void DrawTriangle(
Vector2 a,
Vector2 b,
Vector2 c,
ShapeOptions shapeOptions = null)
{
shapeOptions ??= PresentationConsts.Shape.DefaultOptions;
var vertices = new float[]
{
a.X, a.Y,
b.X, b.Y,
c.X, c.Y,
};
GL.BindBuffer(BufferTarget.ArrayBuffer, _baoId);
GL.BufferData(
BufferTarget.ArrayBuffer,
vertices.Length * sizeof(float),
vertices,
BufferUsageHint.DynamicDraw);
shapeOptions.UseWithProgram();
GL.BindVertexArray(_vaoId);
GL.DrawArrays(PrimitiveType.Triangles, 0, 3);
GL.BindVertexArray(0);
GL.UseProgram(0);
}
Code: Select all
public enum DrawMode
{
Clockwise,
CounterClockwise
}
Code: Select all
var vertices = shapeOptions.DrawMode == DrawMode.Clockwise
? new float[] { a.X, a.Y, b.X, b.Y, c.X, c.Y }
: new float[] { a.X, a.Y, c.X, c.Y, b.X, b.Y };
- Angenommen, die Eckpunkte des Dreiecks werden in der Reihenfolge a -> b -> c übergeben.
- Angenommen, der Modus ist auf CCW eingestellt.
- Fall 1
Die Wicklung ist gegen den Uhrzeigersinn.
Code: Select all
b a c - Fall 2
Die Wicklung ist CW.
Code: Select all
a c b
Oder reicht es, die Scheitelpunkte einfach blind entsprechend dem ausgewählten Modus auszutauschen?
Mobile version