Код: Выделить всё
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);
}
Код: Выделить всё
public enum DrawMode
{
Clockwise,
CounterClockwise
}
Код: Выделить всё
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 };
- Предположим, вершины треугольника передаются в порядке a -> b -> c.
- Предположим, что установлен режим CCW.
- Случай 1
Обмотка — против часовой стрелки.
Код: Выделить всё
b a c - Случай 2
Обмотка CW.
Код: Выделить всё
a c b
Или достаточно просто менять местами вершины вслепую в соответствии с выбранным режимом?>
Подробнее здесь: https://stackoverflow.com/questions/798 ... re-correct
Мобильная версия