Должен ли я изменить порядок вершин треугольника в зависимости от их положения, чтобы обеспечить правильную намотку (по C#

Место общения программистов C#
Ответить
Anonymous
 Должен ли я изменить порядок вершин треугольника в зависимости от их положения, чтобы обеспечить правильную намотку (по

Сообщение Anonymous »

Я рисую треугольники в OpenGL с помощью DrawArrays():

Код: Выделить всё

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);
}
У меня есть режим в ShapeOptions для выбора обмотки вершин:

Код: Выделить всё

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.
Нужно ли предварительно рассчитывать обмотку путем сравнения положений вершин и переупорядочивать их перед применением логики CW/CCW?
Или достаточно просто менять местами вершины вслепую в соответствии с выбранным режимом?>

Подробнее здесь: https://stackoverflow.com/questions/798 ... re-correct
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»