Сейчас я изучаю OpenGL, и я хочу нарисовать пирамиду, где каждая сторона имеет другой цвет. Проблема, с которой я сталкиваюсь, заключается в том, что я только могу назначить цвета вершинам, а не сторонам. Поэтому каждая сторона имеет эффект градиента, а не сплошной цвет. Как я могу дать своим сторонам сплошной цвет?OpenGL, как дать сторонам пирамиды сплошные цвета
void init_buffer()
{
glGenBuffers(1, &(b.trifan));
glBindBuffer(GL_ARRAY_BUFFER, b.trifan);
GLfloat trifan[6][3] =
{
{0.0, 1.0, 0.0},
{1.0, 0.0, 1.0},
{-1.0, 0.0, 1.0},
{-1.0, 0.0, -1.0},
{1.0, 0.0, -1.0},
{1.0, 0.0, 1.0}
};
glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * 3 * 6, trifan, GL_STATIC_COPY);
//base of the pyramid as 2 triangles
glGenBuffers(1, &(b.tribase));
glBindBuffer(GL_ARRAY_BUFFER, b.tribase);
GLfloat tribase[4][3] =
{
{1.0, 0.0, -1.0},
{-1.0, 0.0, -1.0},
{1.0, 0.0, 1.0},
{-1.0, 0.0, 1.0}
};
glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * 4 * 3, tribase, GL_STATIC_COPY);
//colors
glGenBuffers(1, &b.colors);
glBindBuffer(GL_ARRAY_BUFFER, b.colors);
GLfloat colors[6][3] =
{
{1.0, 0.0, 0.0},
{1.0, 0.0, 0.0},
{1.0, 0.0, 0.0},
{1.0, 0.0, 1.0},
{0.5, 0.0, 1.0},
{1.0, 0.0, 0.5},
};
glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * 3 * 6, colors, GL_STATIC_COPY);
check_errors();
}
...
//Inside my display function
glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_VERTEX_ARRAY);
{
glBindBuffer(GL_ARRAY_BUFFER, b.trifan);
glVertexPointer(3, GL_FLOAT, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, b.colors);
glColorPointer(3, GL_FLOAT, 0, 0);
glDrawArrays(GL_TRIANGLE_FAN, 0, 6);
glBindBuffer(GL_ARRAY_BUFFER, b.tribase);
glVertexPointer(3, GL_FLOAT, 0, 0);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
}
glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
Возможно, вам необходимо дублировать вершины, чтобы вы могли указать один цвет для каждого лица. –
Это кажется неэффективным – chasep255
Это единственный способ, как вы можете это сделать. – BDL