Посмотреть внутри цилиндра

Если я нарисую gluCylinder с gluDisk наверху. Без выбраковки я получаю нужный цилиндр с эффектом крышки. Однако, если я включаю отбраковку, диск (он же крышка) исчезает. Это почему? Это главный вопрос. Кроме того, при включенном отбраковке задние поверхности цилиндра также не прорисовываются. Я понимаю, почему это происходит, но я все еще хотел бы видеть внутреннюю часть цилиндра нарисованной. Код является:

    glPushMatrix()
    quadratic = gluNewQuadric()
    gluQuadricNormals(quadratic, GLU_SMOOTH)
    gluQuadricTexture(quadratic, GL_TRUE)
    glRotatef(90, 1, 0, 0)
    glTranslate(0, 0, -3*sz)
    gluCylinder(quadratic, 0.75*sz, 0.75*sz, 3.0*sz, 32, 32)
    gluDisk(quadratic, 0.0, 0.75*sz, 32, 32)
    glPopMatrix()

2 ответа

Решение

Ваш диск направлен не в ту сторону (неправильная обмотка). Поэтому оно отбраковано. Вы можете попробовать изменить его ориентацию, используя gluQuadricOrientation, это должно сделать свое дело. Для получения дополнительной информации обратитесь к спецификации OpenGL для gluDisk и glCullFace.

Диск - это просто плоскость без какой-либо толщины. Таким образом, одна сторона впереди, а другая сзади, и при включенном отбраковке одна из них отбрасывается. Вы, вероятно, просто видите выброшенную сторону. Если это не та сторона, которую вы хотите увидеть, просто вращайте диск вокруг. Ничего особенного в этом нет. Так что просто оберните это в:

glPushMatrix();
glRotatef(180.0f, 0.0f, 1.0f, 0.0f);
gluDisk(quadratic, 0.0, 0.75*sz, 32, 32);
glPopMatrix();

Или, как предлагает kroneml, изменить ориентацию своих треугольников. Решите для себя, какой из них является более концептуально правильным в вашей ситуации.

Другие вопросы по тегам