Он рисует цилиндр со стеками и краями, но проблема в том, что стеки подключены к одной точке, а не к новой. Может быть, картина будет показывать лучше: Цилиндр с треугольниками в OpenGL
А вот как я рендеринга на стороне, потому что диски предоставляются отдельно:
for (int i = 1; i <= height; ++i) {
for (int j = 0; j < edges; ++j) {
glBegin(GL_TRIANGLES); {
// 0 bottom
glVertex3f(x + radius * cos(theta + interval), y , z + radius * sin(theta + interval));
// 1 bottom
glVertex3f(x + radius * cos(theta), y + y_value * i, z + radius * sin(theta));
// 2 top
glVertex3f(x + radius * cos(theta), y + y_value * i, z + radius * sin(theta));
// 2 top
glVertex3f(x + radius * cos(theta), y + y_value * i, z + radius * sin(theta));
// 3 top
glVertex3f(x + radius * cos(theta + interval), y + y_value * i, z + radius * sin(theta + interval));
// 0 bottom
glVertex3f(x + radius * cos(theta + interval), y , z + radius * sin(theta + interval));
} glEnd();
theta += interval;
}
theta = 0.0;
}
Я пытался решить эту проблему в течение нескольких дней, и я бегу из идей. Знаете ли вы, что я делаю неправильно?
ОБНОВЛЕНИЕ: Я изменил его для рендеринга с помощью квадроциклов, используя совет ybungalobill. Теперь я борюсь с УФ-картографированием. И, надеюсь, когда эта часть будет решена, будет легко конвертироваться в треугольники. Вот что я сейчас:
И вот код, я использую для УФ отображения:
u = 0.0,
v = 0.0,
u_inter = 1.0/edges,
v_inter = 1.0/y_value; // (y_value = height/edges)
for (int i = 1; i <= height; ++i) {
for (int j = 0; j < edges; ++j) {
glBegin(GL_QUAD_STRIP); {
// 0 bottom
glTexCoord2f(u, v);
// 1 bottom
glTexCoord2f(u + u_inter, v);
// 2 top
glTexCoord2f(u + u_inter, v + v_inter);
// 3 top
glTexCoord2f(u, v + v_inter);
} glEnd();
theta += interval;
u += u_inter;
}
v += v_inter;
theta = 0.0;
}
Спасибо! Работает! – carrotcake
На самом деле мне пришлось изменить y0 в // 1 до y1, но я думаю, что понимаю, что вы там делали. – carrotcake
Странно, потому что у вас должно быть три вершины сверху и внизу. – ybungalobill