Quad не генерирует должным образом?

У меня есть высота и ширина, и я пытаюсь сгенерировать квад из них.
Когда я делаю это:

vector<Point2D> vertices;
vector<unsigned int> indices;

Point2D topLeft = Point2(0, height);
Point2D topRight = Point2(width, height);
Point2D bottomLeft = Point2(0, 0);
Point2D bottomRight= Point2(width, 0);

indices.push_back(0);
indices.push_back(1);
indices.push_back(2);
indices.push_back(0);
indices.push_back(2);
indices.push_back(3);

vertices.push_back(topLeft);
vertices.push_back(topRight);
vertices.push_back(bottomLeft);
vertices.push_back(bottomRight);

Я получаю треугольник вместо четырехугольника.
Но когда я делаю это:

vector<Point2D> vertices;
vector<unsigned int> indices;

Point2D topLeft = Point2(-width, height);
Point2D topRight = Point2(width, height);
Point2D bottomLeft = Point2(width, -height);
Point2D bottomRight= Point2(-width, -height);

indices.push_back(0);
indices.push_back(1);
indices.push_back(2);
indices.push_back(0);
indices.push_back(2);
indices.push_back(3);

vertices.push_back(topLeft);
vertices.push_back(topRight);
vertices.push_back(bottomLeft);
vertices.push_back(bottomRight);

Это работает отлично. Что идет не так? Я думаю, что справа внизу?

0

Решение

Этот первый сегмент образует два треугольника, перекрывающихся с разной намоткой, а треугольник с намоткой против часовой стрелки отбраковывается. Если вы выключите отбраковку, вы увидите оба треугольника, но не в том порядке, который вам нужен.

Второе расположение совершенно иное, два треугольника имеют порядок намотки по часовой стрелке, который образует квад. Если вы замените отрицательные числа нулями, вы увидите, что они не совпадают с предыдущими.

Point2D topLeft    = Point2(    0, height);
Point2D topRight   = Point2(width, height);
Point2D bottomLeft = Point2(width, 0);
Point2D bottomRight= Point2(0,     0);
1

Другие решения

Не зная точно, что вы используете, я бы предложил использовать x и y вместо width и height, поскольку вы устанавливаете «width» в 0, который используется в качестве координаты x. Метки могут привести к путанице в отношении того, с чем вы на самом деле работаете, поскольку вряд ли вы захотите, чтобы ширина или высота были равны 0.

Если вы нарисуете на бумаге координаты точек, которые вы добавляете как вершины, кажется, что вы делаете треугольник. Если высота = 3 и ширина = 4, ваш список вершин:

(0, 3) // вверх по у

(3, 4) // по х

(0, 0) // назад к 0 — треугольник!

(4, 0) // одинокий отрезок вдоль х

Мне кажется, что порядок, в котором вы нажимаете вершины, должен быть topLeft-> topRight-> bottomRight-> bottomLeft, чтобы сделать многоугольник по часовой стрелке.

0

По вопросам рекламы [email protected]