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

0

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

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
    Треугольники имеют ориентацию. Если вы рисуете треугольник, обращенный от вас, он превращается в ничто. Порядок намотки важен.
  • 0
    @IInspectable, но это работало, когда я не устанавливал нижний левый угол равным 0,0, я просто сместил их все на одно и то же значение, и теперь оно совершенно другое
Теги:
geometry
quad
vertices

2 ответа

1
Лучший ответ

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

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

Point2D topLeft    = Point2(    0, height);
Point2D topRight   = Point2(width, height);
Point2D bottomLeft = Point2(width, 0);
Point2D bottomRight= Point2(0,     0);
  • 0
    поэтому мне нужно добавить индексы в другом порядке?
  • 0
    Я добавил код для заказа, я думаю, будет работать
Показать ещё 1 комментарий
0

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

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

(0, 3)//вверх вдоль y

(3, 4)//по х

(0, 0)//обратно в 0 - треугольник!

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

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

  • 0
    Я делаю четырехугольник, в основном я хочу, чтобы нижний левый угол находился в месте с x = 0 и y = 0. Поэтому, естественно, верхний левый угол я делаю равным (0, высота) и так далее ... Я думаю, я я не прав

Ещё вопросы

Сообщество Overcoder
Наверх
Меню