Я ищу хороший способ привлечь цилиндр на OpenGL, я попытался сделать несколько круговDraw цилиндр в OpenGL на основе шейдеров
for (GLuint m = 0; m <= segments; ++m) {
for (GLuint n = 0; n <= segments; ++n) {
GLfloat const t = 2 * M_PI * (float) n/(float) segments;
//position
points[num++] = x + sin(t) * r;
points[num++] = .0005 * m;
points[num++] = y + cos(t) * r;
//color
points[num++] = 1;
points[num++] = 1;
points[num++] = 1;
//texture
points[num++] = sin(t) * 0.5 + 0.5;
points[num++] = cos(t) * 0.5 + 0.5;
}
}
и на функцию отображения
GLuint pointer = 0;
for (GLuint i = 0; i <= segments; ++i) {
glDrawArrays(GL_TRIANGLE_FAN, pointer, segments + 1);
pointer += segments + 1;
}
Я спрашивая, есть ли прямой способ нарисовать этот цилиндр.
Вопрос не очень ясен для меня. Что вы понимаете, рисуя цилиндр «прямо»? Если вы спрашиваете, можете ли вы попросить OpenGL нарисовать примитивы, такие как круги, не разлагая их на треугольники, ответ обычно «нет». – aardvarkk
вам также понадобится треугольная полоска для мантии, вы можете повторно использовать места для внешних дисков, которые у вас есть. –
Если ваш цилиндр уже разбит на треугольники, я бы рекомендовал вам просто использовать индексированные вершины, чтобы нарисовать его (посмотрите 'glDrawElements'). Вы просто создадите список всех ваших вершин (без дублирования), а затем просто рисуете треугольники, указав соответствующие индексы. – aardvarkk