OpenGL - Sweep Представления - PullRequest
       8

OpenGL - Sweep Представления

0 голосов
/ 24 октября 2011

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

Я также могу нарисовать эти точки в трехмерном пространстве, в другом окне, в виде линии. Как мне провести их вокруг оси, скажем, Y, чтобы получить трехмерную сетку? Я считаю, что обычный пример этого - использование точек для создания линии в Maya, для создания кубка или чего-то подобного.

Похоже, я не могу найти много, прибегнув к поиску в Google термина "Sweep репрезентация", как в моем учебнике говорится об этом процессе. Я просто ищу какой-то мыслительный процесс или руководство, чтобы направлять меня!

Ответы [ 2 ]

2 голосов
/ 24 октября 2011

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

Лично я бы сгенерировал буфер вершин и индексный буфер.Я бы вращал линию N раз вокруг оси Y, сохраняя точки каждой повернутой линии в буфере вершин.

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

Итак, учитывая, что у вас есть буфер вершин V, количество точек в исходной строке P и количество линий N, вы можете просто перебирать, генерируя полосы треугольников, испуская индекс I и индекс I + P,P * N раз.Затем вы визуализируете N треугольных полос с учетом буфера вершин и индексного буфера.

Если вы хотите быть умным, вы можете просто сохранить индексный буфер с единичными индексами полос и добавлять P к базовому индексу вершин каждыйвремя рендераБудьте осторожны с сетками с высокой тесселяцией и множеством индексов.У некоторых карт максимальный индекс вершин составляет 65535, у других - только немного больше.

Надеюсь, это имело смысл!

0 голосов
/ 24 октября 2011

не совсем уверен, какое окончательное изображение вы хотите достичь, но, насколько я понимаю, у вас есть «линия» (это прямая линия? Изогнутая «линия»? - не совсем понятно по этому поводу) - и вы хотите вращать их вокруг некоторой оси, чтобы создать некую двумерную «сетку», такую ​​как диск, конус или что-то еще?

Вы можете просто попробовать glRotatef (a, x, y, z) где:

«а» - это угол, который вы хотите повернуть и это вектор, вокруг которого вы вращаетесь.

Таким образом, если вы хотите построить фигуру 10 раз вокруг оси y, она может выглядеть следующим образом:

for(int i = 0; i<10; i++)
{
    float da = 2.0*3.14/10.0
    plotLine(); // function for plotting the line once in 3 space
    glRotatef(da, 0, 1, 0);
}

это построит линию, повернет всю фигуру на небольшое количество, затем построит ее снова (это будет повторяться 10 раз, так что исходная линия будет построена 10 раз вокруг оси - создавая «сетку», в которую я вам верю) пытаемся достичь

...